pommed-1.1/0000775000175000017500000000000010550765203012177 5ustar julienjulienpommed-1.1/pommed.10000664000175000017500000000264310550760647013556 0ustar julienjulien.\" Hey, EMACS: -*- nroff -*- .TH POMMED 1 "2007-01-09" .SH NAME pommed \- Apple laptops hotkeys event handler .SH SYNOPSIS .B pommed .RI [ options ] .SH DESCRIPTION This manual page documents briefly the .B pommed daemon. .PP .B pommed is a daemon handling the hotkeys found on the Apple laptops, like the MacBook Pro, MacBook and PowerBook laptops. These hotkeys control, through .B pommed , the LCD backlight level, the audio volume, the keyboard backlight level (only on the MacBook Pro and the latest PowerBook) and the CD/DVD drive ejection. Additionally, .B pommed monitors the ambient light sensors found on the MacBook Pro and the latest PowerBook to automatically light up the keyboard backlight when the ambient light level gets too low. .PP .B pommed can optionally support the Apple Remote Control, too (this option is disabled by default and only available for the MacBook Pro and MacBook). .SH OPTIONS .B pommed accepts the following command-line options. .TP .B \-v Print version information. .TP .B \-f Run in the foreground, printing log messages to stdout. .TP .B \-d Run in the foreground, printing log messages to stdout and debug messages to stderr. .SH FILES .TP .B /etc/pommed.conf The configuration file for \fBpommed\fP. See the comments in the file for the structure of the file and the available options. .SH AUTHOR .B pommed was written by Julien BLACHE . pommed-1.1/pommed/0000775000175000017500000000000010550765203013460 5ustar julienjulienpommed-1.1/pommed/pmac/0000775000175000017500000000000010550765203014400 5ustar julienjulienpommed-1.1/pommed/pmac/ambient.c0000664000175000017500000000506610550754134016173 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: ambient.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * Copyright (C) 2006 Yves-Alexis Perez * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include "../pommed.h" #include "../ambient.h" #include "../dbus.h" struct _ambient_info ambient_info; #define I2C_DEV "/dev/i2c-7" #define I2C_SLAVE 0x703 #define LMU_ADDR 0x42 #define KBD_AMBIENT_MAX_RAW 1600 void ambient_get(int *r, int *l) { int fd; int ret; char buf[4]; fd = open(I2C_DEV, O_RDONLY); if (fd < 0) { *r = -1; *l = -1; ambient_info.right = 0; ambient_info.left = 0; logmsg(LOG_ERR, "Could not open i2c device %s: %s\n",I2C_DEV, strerror(errno)); return; } ret = ioctl(fd, I2C_SLAVE, LMU_ADDR); if (ret < 0) { close(fd); *r = -1; *l = -1; ambient_info.right = 0; ambient_info.left = 0; logmsg(LOG_ERR, "ioctl failed on %s: %s\n",I2C_DEV, strerror(errno)); return; } ret = read(fd, buf, 4); if (ret != 4) { close(fd); *r = -1; *l = -1; ambient_info.right = 0; ambient_info.left = 0; return; } close(fd); /* found in pbbuttonsd.conf */ *r = (int) (((buf[0] << 8) | buf[1]) * KBD_AMBIENT_MAX) / KBD_AMBIENT_MAX_RAW; *l = (int) (((buf[2] << 8) | buf[3]) * KBD_AMBIENT_MAX) / KBD_AMBIENT_MAX_RAW; logdebug("Ambient light: right %d, left %d\n", *r, *l); ambient_info.right = *r; ambient_info.left = *l; } void ambient_init(int *r, int *l) { ambient_get(r, l); ambient_info.max = KBD_AMBIENT_MAX; ambient_info.left = *l; ambient_info.right = *r; } pommed-1.1/pommed/pmac/r128_backlight.c0000664000175000017500000000711110550754134017251 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: r128_backlight.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include "../pommed.h" #include "../conffile.h" #include "../lcd_backlight.h" #include "../dbus.h" #define SYSFS_BACKLIGHT "/sys/class/backlight/aty128bl0" static int probed = 0; static int r128_backlight_get(void) { int fd; int n; char buffer[4]; if (!probed) return 0; fd = open(SYSFS_BACKLIGHT "/actual_brightness", O_RDONLY); if (fd < 0) { logmsg(LOG_WARNING, "Could not open sysfs actual_brightness node: %s", strerror(errno)); return 0; } n = read(fd, buffer, sizeof(buffer) -1); if (n < 1) { logmsg(LOG_WARNING, "Could not read sysfs actual_brightness node"); close(fd); return 0; } close(fd); return atoi(buffer); } static void r128_backlight_set(int value) { FILE *fp; fp = fopen(SYSFS_BACKLIGHT "/brightness", "a"); if (fp == NULL) { logmsg(LOG_WARNING, "Could not open sysfs brightness node: %s", strerror(errno)); return; } fprintf(fp, "%d", value); fclose(fp); } /* The brightness keys are handled by the kernel itself, so * we're only updating our internal buffers */ void r128_backlight_step(int dir) { int val; val = r128_backlight_get(); logdebug("LCD stepping: %d -> %d\n", lcd_bck_info.level, val); mbpdbus_send_lcd_backlight(val, lcd_bck_info.level); lcd_bck_info.level = val; } #define PCI_ID_VENDOR_ATI 0x1002 #define PCI_ID_PRODUCT_R128 0x4c46 /* Look for an ATI Rage128 Mobility */ int r128_backlight_probe(void) { struct pci_access *pacc; struct pci_dev *dev; pacc = pci_alloc(); if (pacc == NULL) { logmsg(LOG_ERR, "Could not allocate PCI structs"); return -1; } pci_init(pacc); pci_scan_bus(pacc); /* Iterate over all devices */ for(dev = pacc->devices; dev; dev = dev->next) { pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES); /* ATI r128 */ if ((dev->vendor_id == PCI_ID_VENDOR_ATI) && (dev->device_id == PCI_ID_PRODUCT_R128)) { probed = 1; } } pci_cleanup(pacc); if (!probed) { logdebug("Failed to detect ATI Rage128, aborting...\n"); return -1; } lcd_bck_info.max = R128_BACKLIGHT_MAX; /* * Set the initial backlight level * The value has been sanity checked already */ if (lcd_r128_cfg.init > -1) { r128_backlight_set(lcd_r128_cfg.init); } lcd_bck_info.level = r128_backlight_get(); return 0; } void r128_backlight_fix_config(void) { if (lcd_r128_cfg.init < 0) lcd_r128_cfg.init = -1; if (lcd_r128_cfg.init > R128_BACKLIGHT_MAX) lcd_r128_cfg.init = R128_BACKLIGHT_MAX; } pommed-1.1/pommed/pmac/kbd_backlight.c0000664000175000017500000001767510550754134017335 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: kbd_backlight.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * Copyright (C) 2006 Yves-Alexis Perez * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include "oflib/of_api.h" #include "../pommed.h" #include "../conffile.h" #include "../kbd_backlight.h" #include "../ambient.h" #include "../dbus.h" #define I2C_DEV "/dev/i2c-7" #define I2C_SLAVE 0x0703 struct _kbd_bck_info kbd_bck_info; static struct { int auto_on; /* automatic */ int off; /* turned off ? */ int value; /* previous value */ int r_sens; /* right sensor */ int l_sens; /* left sensor */ } kbd_bck_status; static int lmuaddr; /* i2c bus address */ static char *i2cdev; /* i2c bus device */ int has_kbd_backlight(void) { return ((mops->type == MACHINE_POWERBOOK_55) || (mops->type == MACHINE_POWERBOOK_56) || (mops->type == MACHINE_POWERBOOK_57)); } static int kbd_backlight_get(void) { if (lmuaddr == 0) return 0; return kbd_bck_info.level; } static void kbd_backlight_set(int val) { int fd, curval, ret; unsigned char buf[8]; curval = kbd_backlight_get(); /* automatic backlight toggle by user */ if ((val == KBD_BACKLIGHT_OFF) && (kbd_bck_status.auto_on)) { if (!kbd_bck_status.off) { printf("trouc: status is off\n"); kbd_bck_status.off = 1; kbd_bck_status.value = curval; } else { printf("trouc: status is on\n"); kbd_bck_status.off = 0; val = kbd_bck_status.value; } } /* backlight turned on again by user */ if ((val > KBD_BACKLIGHT_OFF) && (kbd_bck_status.auto_on) && (kbd_bck_status.off)) kbd_bck_status.off = 0; if (val == curval) return; if ((val < KBD_BACKLIGHT_OFF) || (val > KBD_BACKLIGHT_MAX)) return; if (lmuaddr == 0) return; buf[0] = 0x01; /* i2c register */ /* The format appears to be: (taken from pbbuttonsd) * byte 1 byte 2 * |<---->| |<---->| * xxxx7654 3210xxxx * |<----->| * ^-- brightness */ buf[1] = (unsigned char) val >> 4; buf[2] = (unsigned char) val << 4; fd = open (i2cdev, O_RDWR); if (fd < 0) { logmsg(LOG_ERR, "Could not open %s: %s\n", I2C_DEV, strerror(errno)); return; } ret = ioctl(fd, I2C_SLAVE, lmuaddr); if (ret < 0) { logmsg(LOG_ERR, "Could not ioctl the i2c bus: %s\n", strerror(errno)); close(fd); return; } if (write (fd, buf, 3) < 0) logmsg(LOG_ERR, "Could not set kbd brightness: %s\n", strerror(errno)); close(fd); mbpdbus_send_kbd_backlight(val, kbd_bck_info.level); kbd_bck_info.level = val; } void kbd_backlight_off(void) { kbd_backlight_set(KBD_BACKLIGHT_OFF); } void kbd_backlight_step(int dir) { int val; int newval; if (lmuaddr == 0) return; val = kbd_backlight_get(); if (val < 0) return; if (dir == STEP_UP) { newval = val + kbd_cfg.step; if (newval > KBD_BACKLIGHT_MAX) newval = KBD_BACKLIGHT_MAX; logdebug("KBD stepping +%d -> %d\n", kbd_cfg.step, newval); } else if (dir == STEP_DOWN) { newval = val - kbd_cfg.step; if (newval < KBD_BACKLIGHT_OFF) newval = KBD_BACKLIGHT_OFF; logdebug("KBD stepping -%d -> %d\n", kbd_cfg.step, newval); } else return; kbd_backlight_set(newval); } void kbd_backlight_init(void) { int ret; kbd_bck_status.auto_on = 0; kbd_bck_status.off = 0; lmuaddr = kbd_get_lmuaddr(); i2cdev = "/dev/i2c-7"; ret = kbd_probe_lmu(lmuaddr, i2cdev); if ((!has_kbd_backlight()) || (ret < 0)) { lmuaddr = 0; i2cdev = NULL; kbd_bck_status.value = 0; kbd_bck_status.r_sens = 0; kbd_bck_status.l_sens = 0; kbd_bck_info.level = 0; kbd_bck_info.level = 0; ambient_info.left = 0; ambient_info.right = 0; ambient_info.max = 0; return; } kbd_bck_status.value = kbd_backlight_get(); if (kbd_bck_status.value < 0) kbd_bck_status.value = 0; kbd_bck_info.level = kbd_bck_status.value; kbd_bck_info.max = KBD_BACKLIGHT_MAX; ambient_init(&kbd_bck_status.r_sens, &kbd_bck_status.l_sens); } void kbd_backlight_ambient_check(void) { int amb_r, amb_l; ambient_get(&amb_r, &amb_l); if ((amb_r < 0) || (amb_l < 0)) return; if ((amb_r < kbd_cfg.on_thresh) && (amb_l < kbd_cfg.on_thresh)) { logdebug("Ambient light lower threshold reached\n"); /* backlight turned on automatically, then disabled by user */ if (kbd_bck_status.auto_on && kbd_bck_status.off) return; /* backlight already on */ if (kbd_backlight_get() > KBD_BACKLIGHT_OFF) return; /* turn on backlight */ kbd_bck_status.auto_on = 1; kbd_bck_status.off = 0; kbd_backlight_set(kbd_cfg.auto_lvl); } else if (kbd_bck_status.auto_on) { if ((amb_r > kbd_cfg.off_thresh) || (amb_l > kbd_cfg.off_thresh)) { logdebug("Ambient light upper threshold reached\n"); kbd_bck_status.auto_on = 0; kbd_bck_status.off = 0; kbd_backlight_set(KBD_BACKLIGHT_OFF); } } mbpdbus_send_ambient_light(amb_l, kbd_bck_status.l_sens, amb_r, kbd_bck_status.r_sens); kbd_bck_status.r_sens = amb_r; kbd_bck_status.l_sens = amb_l; } void kbd_backlight_fix_config(void) { if (kbd_cfg.auto_lvl > KBD_BACKLIGHT_MAX) kbd_cfg.auto_lvl = KBD_BACKLIGHT_MAX; if (kbd_cfg.step < 1) kbd_cfg.step = 1; if (kbd_cfg.step > (KBD_BACKLIGHT_MAX / 2)) kbd_cfg.step = KBD_BACKLIGHT_MAX / 2; } int kbd_get_lmuaddr(void) { struct device_node *node; int plen, lmuaddr = -1; long *reg = NULL; of_init(); node = of_find_node_by_type("lmu-controller", 0); if (node == NULL) return -1; reg = of_find_property(node, "reg", &plen); lmuaddr = (int) (*reg >> 1); free(reg); of_free_node(node); return lmuaddr; } #if 0 /* Old code */ int kbd_get_lmuaddr2(void) { int fd; int ret; long reg; fd = open(LMU_REG, O_RDONLY); if (fd < 0) { logmsg(LOG_ERR, "Could not open lmu %s: %s\n", LMU_REG, strerror(errno)); fd = open(LMU_REG_55, O_RDONLY); if (fd < 0) { logmsg(LOG_ERR, "Could not open lmu %s: %s\n", LMU_REG_55, strerror(errno)); return -1; } } ret = read(fd, ®, sizeof(long)); close(fd); if (ret == sizeof(long)) return (int)(reg >> 1); return 0; } #endif /* 0 */ char * kbd_get_i2cdev(int addr) { return I2C_DEV; } int kbd_probe_lmu(int addr, char *dev) { int fd; int ret; char buffer[4]; fd = open(dev, O_RDWR); if (fd < 0) { logmsg(LOG_WARNING, "Could not open device %s: %s\n", dev, strerror(errno)); return -1; } ret = ioctl(fd, I2C_SLAVE, addr); if (ret < 0) { logmsg(LOG_ERR, "ioctl failed on %s: %s\n", dev, strerror(errno)); close(fd); return -1; } ret = read(fd, buffer, 4); if (ret != 4) { logmsg(LOG_WARNING, "Probing failed on %s: %s\n", dev, strerror(errno)); close(fd); return -1; } close(fd); logdebug("Probing successful on %s\n", dev); return 0; } pommed-1.1/pommed/pmac/r9600_backlight.c0000664000175000017500000001031410550754134017334 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: r9600_backlight.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * Copyright (C) 2006 Yves-Alexis Perez * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include "../pommed.h" #include "../conffile.h" #include "../lcd_backlight.h" #include "../dbus.h" struct _lcd_bck_info lcd_bck_info; #define SYSFS_BACKLIGHT "/sys/class/backlight/radeonbl0" static int probed = 0; static int r9600_backlight_get(void) { int fd; int n; char buffer[4]; if (!probed) return 0; fd = open(SYSFS_BACKLIGHT "/actual_brightness", O_RDONLY); if (fd < 0) { logmsg(LOG_WARNING, "Could not open sysfs actual_brightness node: %s", strerror(errno)); return 0; } n = read(fd, buffer, sizeof(buffer) -1); if (n < 1) { logmsg(LOG_WARNING, "Could not read sysfs actual_brightness node"); close(fd); return 0; } close(fd); return atoi(buffer); } static void r9600_backlight_set(int value) { FILE *fp; fp = fopen(SYSFS_BACKLIGHT "/brightness", "a"); if (fp == NULL) { logmsg(LOG_WARNING, "Could not open sysfs brightness node: %s", strerror(errno)); return; } fprintf(fp, "%d", value); fclose(fp); } void r9600_backlight_step(int dir) { int val; int newval; if (!probed) return; val = r9600_backlight_get(); if (dir == STEP_UP) { newval = val + lcd_r9600_cfg.step; if (newval > R9600_BACKLIGHT_MAX) newval = R9600_BACKLIGHT_MAX; logdebug("LCD stepping +%d -> %d\n", lcd_r9600_cfg.step, newval); } else if (dir == STEP_DOWN) { newval = val - lcd_r9600_cfg.step; if (newval < R9600_BACKLIGHT_OFF) newval = R9600_BACKLIGHT_OFF; logdebug("LCD stepping -%d -> %d\n", lcd_r9600_cfg.step, newval); } else return; r9600_backlight_set(newval); mbpdbus_send_lcd_backlight(newval, val); lcd_bck_info.level = newval; } #define PCI_ID_VENDOR_ATI 0x1002 #define PCI_ID_PRODUCT_R9600 0x4e50 /* Look for an ATI Radeon Mobility r9600 */ int r9600_backlight_probe(void) { struct pci_access *pacc; struct pci_dev *dev; pacc = pci_alloc(); if (pacc == NULL) { logmsg(LOG_ERR, "Could not allocate PCI structs"); return -1; } pci_init(pacc); pci_scan_bus(pacc); /* Iterate over all devices */ for(dev = pacc->devices; dev; dev = dev->next) { pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES); /* ATI R9600 */ if ((dev->vendor_id == PCI_ID_VENDOR_ATI) && (dev->device_id == PCI_ID_PRODUCT_R9600)) { probed = 1; } } pci_cleanup(pacc); if (!probed) { logdebug("Failed to detect ATI R9600, aborting...\n"); return -1; } lcd_bck_info.max = R9600_BACKLIGHT_MAX; /* * Set the initial backlight level * The value has been sanity checked already */ if (lcd_r9600_cfg.init > -1) { r9600_backlight_set(lcd_r9600_cfg.init); } lcd_bck_info.level = r9600_backlight_get(); return 0; } void r9600_backlight_fix_config(void) { if (lcd_r9600_cfg.init < 0) lcd_r9600_cfg.init = -1; if (lcd_r9600_cfg.init > R9600_BACKLIGHT_MAX) lcd_r9600_cfg.init = R9600_BACKLIGHT_MAX; if (lcd_r9600_cfg.step < 1) lcd_r9600_cfg.step = 1; if (lcd_r9600_cfg.step > (R9600_BACKLIGHT_MAX / 2)) lcd_r9600_cfg.step = R9600_BACKLIGHT_MAX / 2; } pommed-1.1/pommed/pmac/oflib/0000775000175000017500000000000010550765203015473 5ustar julienjulienpommed-1.1/pommed/pmac/oflib/of_externals.h0000664000175000017500000000343410550754134020342 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef __OF_DEVICE_BY__ #define __OF_DEVICE_BY__ #define OF_SEARCH_NAME 0x01 #define OF_SEARCH_TYPE 0x02 #define OF_SEARCH_PHDL 0x03 struct device_node *_n_array[256]; int _n_idx; int _n_sem; struct device_node *_t_array[256]; int _t_idx; int _t_sem; struct device_node *_p_array[2]; int _p_sem; int _p_idx; void of_init(void); void of_init_root(char *path); struct device_node *of_find_node_by_type(const char *device_type, int type); struct device_node *of_find_node_by_name(const char *name, int type); struct device_node *of_find_node_by_path(const char *path); struct device_node *of_find_node_by_phandle(uint32_t phandle); struct device_node *of_get_parent(struct device_node *node); void *of_find_property(struct device_node *node, const char *name, int *plen); int of_test_property(struct device_node *node, const char *name); int of_property_to_uint32(uint32_t *val, void *prop, uint32_t len); int of_property_to_n_uint32(uint32_t *val, void *prop, uint32_t len, int n); int of_property_to_n_uint64(uint64_t *val, void *prop, uint32_t len, int n); struct device_node *of_find_type_devices(const char *device_type); void of_find_type_devices_free(struct device_node *root); #endif pommed-1.1/pommed/pmac/oflib/of_api.h0000664000175000017500000000224710550754134017107 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef __OF_USERSPACE__ #define __OF_USERSPACE__ #define _GNU_SOURCE #include #include #include #include #include #include #include #include char *OF_ROOT; struct node_property_t { uint8_t *data; uint32_t len; }; struct device_node { char *name; char *path; char *full_path; char *type; struct node_property_t linux_phandle; struct device_node *next; void *data; uint32_t len; }; #include "of_standard.h" #include "of_internals.h" #include "of_externals.h" #endif pommed-1.1/pommed/pmac/oflib/of_internals.c0000664000175000017500000001652410550754134020333 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "of_api.h" #include struct device_node *_of_return_nodes(struct device_node **array, int *idx, int *sem, int type) { while (*idx >= 0) { if (*idx == 0 || type == 0) *sem = 0; return *idx > 0 ? array[(*idx)--] : NULL; } return NULL; } char *_of_read_name(const char *path, struct device_node *node) { int fd; char *tmp; char buf[PATH_MAX]; struct stat fstats; uint32_t size; snprintf(buf, sizeof(buf), "%s%s", path, "name"); if (stat(buf, &fstats) < 0) return NULL; size = fstats.st_size; if ((fd = open(buf, O_RDONLY)) < 0) return NULL; if (node) { node->name = calloc(1, size); if(!node->name) of_error("calloc()"); tmp = node->name; } else { tmp = calloc(1, size); if(!tmp) of_error("calloc()"); } if (read(fd, tmp, size) != size) of_error("read()"); close(fd); return tmp; } void _of_read_type(const char *path, struct device_node *node) { int fd; char buf[PATH_MAX]; struct stat fstats; uint32_t size; snprintf(buf, sizeof(buf),"%s%s", path, "device_type"); if (stat(buf, &fstats) < 0) return; size = fstats.st_size; if ((fd = open(buf, O_RDONLY)) < 0) return; node->type = calloc(1, size); if(!node->type) of_error("calloc()"); if (read(fd, node->type, size) != size) of_error("read()"); close(fd); } void _of_read_linux_phandle(const char *path, struct device_node *node) { int fd; char buf[PATH_MAX]; struct stat fstats; uint32_t size; snprintf(buf, sizeof(buf), "%s%s", path, "linux,phandle"); if (stat(buf, &fstats) < 0) return; size = fstats.st_size; if(!size) return; if ((fd = open(buf, O_RDONLY)) < 0) return; node->linux_phandle.len = size; node->linux_phandle.data = calloc(1, size); if (read(fd, node->linux_phandle.data, size) != size) of_error("read()"); close(fd); } void _of_get_path(char *path) { char *ptr; char *p; int i; i = strlen(OF_ROOT); ptr = strdup(path); p = &ptr[i]; sprintf(path, "%s", p); free(ptr); } struct device_node *_of_populate_node(const char *path, const char *name) { struct device_node *tmp = calloc(1, sizeof(struct device_node)); char *p = strdup(path); _of_remove_filename(p); tmp->full_path = strdup(p); if (name) tmp->name = strdup(name); else _of_read_name(path, tmp); _of_get_path(p); tmp->path = strdup(p); free(p); _of_read_linux_phandle(tmp->full_path, tmp); _of_read_type(tmp->full_path, tmp); return tmp; } struct device_node *_of_get_type(const char *path, const char *type) { int fd; char buf[PATH_MAX]; char *name; char *ptr; struct device_node *tmp = NULL; struct stat fstats; uint32_t size; if (stat(path, &fstats) < 0) { exit(EXIT_FAILURE); } size = fstats.st_size; if(!size) return NULL; if ((fd = open(path, O_RDONLY)) < 0) of_error("open()"); if (read(fd, buf, size) != size) of_error("read()"); if (memcmp(buf, type, size)) goto out; ptr = strdup(path); _of_remove_filename(ptr); name = _of_read_name(ptr, NULL); tmp = _of_populate_node(path, name); free(ptr); free(name); out: close(fd); return tmp; } void _of_remove_filename(char *path) { char *ptr; ptr = strrchr(path, '/'); *(ptr + 1) = '\0'; } uint32_t _of_phandle_to_int(struct node_property_t phandle) { uint32_t tmp = 0; if (phandle.len == 4) tmp = (phandle.data[0] << 24) + (phandle.data[1] << 16) + (phandle.data[2] << 8) + phandle.data[3]; return tmp; } void _of_make_compat_path(const char *path, char *buf) { size_t slen = strlen(path); int changed = 0; if (*path != '/') changed = 1; if(!strlen(path)) { snprintf(buf, PATH_MAX, "%s/", OF_ROOT); return; } if (path[slen - 1] != '/') { if (changed) snprintf(buf, PATH_MAX, "%s/%s/", OF_ROOT, path); else snprintf(buf, PATH_MAX, "%s%s/", OF_ROOT, path); } else snprintf(buf, PATH_MAX, "%s%s", OF_ROOT, path); } struct device_node *_of_get_phandle(const char *path, const uint32_t * phandle) { struct node_property_t props; struct device_node *tmp = NULL; uint32_t size, val = 0; struct stat fstats; int fd; char *ptr; char *name; if (stat(path, &fstats) < 0) return NULL; size = fstats.st_size; if(!size) return NULL; props.data = malloc(size); if(!props.data) of_error("calloc()"); props.len = size; if ((fd = open(path, O_RDONLY)) < 0) of_error("open()"); if (read(fd, props.data, size) != size) of_error("read()"); close(fd); val = _of_phandle_to_int(props); free(props.data); if (val == *phandle) { ptr = strdup(path); _of_remove_filename(ptr); name = _of_read_name(ptr, NULL); tmp = _of_populate_node(path, name); free(ptr); free(name); } return tmp; } struct device_node *_of_get_name(const char *path, const char *name) { int fd; uint32_t size; char buf[PATH_MAX]; struct device_node *tmp = NULL; struct stat fstats; if (stat(path, &fstats) < 0) return NULL; size = fstats.st_size; if(!size) return NULL; if ((fd = open(path, O_RDONLY)) < 0) of_error("open()"); if (read(fd, buf, size) != size) of_error("read()"); if (memcmp(buf, name, size)) goto out; tmp = _of_populate_node(path, name); out: close(fd); return tmp; } void _of_find_node_by_parse(char *path, const void *search, uint16_t type, int full) { DIR *dir; struct dirent *tmp = NULL; char *directories[8192] = { NULL }; char fullpath[PATH_MAX]; int x = 0; struct stat fstats; struct device_node *node = NULL; lstat(path, &fstats); if (S_ISLNK(fstats.st_mode)) return; if ((dir = opendir(path)) == NULL) return; while ((tmp = readdir(dir)) != NULL) { if ((strcmp(tmp->d_name, ".")) && (strcmp(tmp->d_name, ".."))) { if (!strcmp(path, "/")) strcat(strcpy(fullpath, "/"), tmp->d_name); else strcat(strcat(strcpy(fullpath, path), "/"), tmp->d_name); if (type == OF_SEARCH_NAME) { if (!strcmp(tmp->d_name, "name")) { if ((node = _of_get_name(fullpath, search)) != NULL) { _n_array[++_n_idx] = node; _n_sem = 1; if(full==0) goto out; } } } if (type == OF_SEARCH_TYPE) { if (!strcmp(tmp->d_name, "device_type")) { if ((node = _of_get_type(fullpath, search)) != NULL) { _t_array[++_t_idx] = node; _t_sem = 1; if(full==0) goto out; } } } if (type == OF_SEARCH_PHDL) { if (!strcmp(tmp->d_name, "linux,phandle")) { if ((node = _of_get_phandle(fullpath, search)) != NULL) { _p_array[++_p_idx] = node; _p_sem = 1; goto out; } } } lstat(fullpath, &fstats); if (S_ISDIR(fstats.st_mode)) directories[x++] = strdup(fullpath); } } x = 0; while (directories[x] != NULL) { _of_find_node_by_parse(directories[x], search, type, full); out: free(directories[x++]); } closedir(dir); } pommed-1.1/pommed/pmac/oflib/of_standard.c0000664000175000017500000000205410550754134020125 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "of_api.h" void of_error(char *error) { fprintf(stderr, "Error: %s\n", error); exit(EXIT_FAILURE); } void of_free_node(struct device_node *node) { if (node->name) free(node->name); if (node->path) free(node->path); if (node->full_path) free(node->full_path); if (node->type) free(node->type); if (node->linux_phandle.data) free(node->linux_phandle.data); if (node->data) free(node->data); if (node) free(node); } pommed-1.1/pommed/pmac/oflib/of_internals.h0000664000175000017500000000265410550754134020337 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef __OF_INTERNALS__ #define __OF_INTERNALS__ #include "of_api.h" void _of_find_node_by_parse(char *path, const void *search, uint16_t type, int full); struct device_node *_of_return_nodes(struct device_node **array, int *idx, int *sem, int type); struct device_node *_of_get_name(const char *path, const char *name); struct device_node *_of_get_type(const char *path, const char *type); struct device_node *_of_populate_node(const char *path, const char *name); struct device_node *_of_get_phandle(const char *path, const uint32_t * phandle); void _of_read_linux_phandle(const char *path, struct device_node *node); void _of_read_type(const char *path, struct device_node *node); void _of_remove_filename(char *path); void _of_get_path(char *path); void _of_make_compat_path(const char *path, char *buf); #endif pommed-1.1/pommed/pmac/oflib/of_externals.c0000664000175000017500000001101310550754134020325 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "of_api.h" void of_init(void) { OF_ROOT="/proc/device-tree"; } void of_init_root(char *path) { uint32_t len; if(!path) of_error("of_init_root() NULL path"); len = strlen(path); if(!len) of_error("of_init_root() Invalid path"); if(path[len-1] == '/') path[len-1] = '\0'; OF_ROOT=path; } int of_test_property(struct device_node *node, const char *name) { struct stat fstats; char buf[PATH_MAX]={0}; strcat(strcat(buf, node->full_path), name); if(stat(buf, &fstats) < 0) return 0; else return 1; } void *of_find_property(struct device_node *node, const char *name, int *plen) { char buf[PATH_MAX]={0}; uint8_t *property; uint32_t size; struct stat fstats; int fd; strcat(strcat(buf, node->full_path), name); if (stat(buf, &fstats) < 0) return NULL; size = fstats.st_size; property = malloc(size); if(!property) of_error("malloc()"); if ((fd = open(buf, O_RDONLY)) < 0) of_error("open()"); if ((*plen = read(fd, property, size)) != size) of_error("read()"); close(fd); return property; } int of_property_to_n_uint64(uint64_t *val, void *prop, uint32_t len, int n) { *val = 0; int i=0; uint8_t *data = prop; if((n*8 > len) || (n == 0)) return 0; for(i=0; i < (n*8)-1; i++); *val = ((uint64_t) data[i - 7] << 56) + ((uint64_t) data[i - 6] << 48) + ((uint64_t) data[i - 5] << 40) + ((uint64_t) data[i - 4] << 32) + ((uint64_t) data[i - 3] << 24) + ((uint64_t) data[i - 2] << 16) + ((uint64_t) data[i - 1] << 8) + (uint64_t) data[i]; return 1; } int of_property_to_n_uint32(uint32_t *val, void *prop, uint32_t len, int n) { *val = 0; int i=0; uint8_t *data = prop; if((n*4 > len) || (n == 0)) return 0; for(i=0; i < (n*4)-1; i++); *val = (data[i-3] << 24) + (data[i-2] << 16) + (data[i-1] << 8) + (data[i]); return 1; } int of_property_to_uint32(uint32_t *val, void *prop, uint32_t len) { *val=0; uint8_t *data = prop; if(len != 4) return 0; *val = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]; return 1; } struct device_node *of_get_parent(struct device_node *node) { struct device_node *tmp; char *p; char *ptr; if((!node->path) || (!node) || (strlen(node->path)==1)) return NULL; ptr=strdup(node->path); p=strrchr(ptr, '/'); *p=0; p=strrchr(ptr, '/'); *p=0; tmp=of_find_node_by_path(ptr); free(ptr); return tmp; } struct device_node *of_find_node_by_name(const char *name, int type) { if (!_n_sem) _of_find_node_by_parse(OF_ROOT, name, OF_SEARCH_NAME, type); return _of_return_nodes(_n_array, &_n_idx, &_n_sem, type); } struct device_node *of_find_type_devices(const char *device_type) { struct device_node *list = calloc(1, sizeof(struct device_node)); struct device_node *tmp = NULL; struct device_node *ptr = list; while ((tmp = of_find_node_by_type(device_type, 1)) != NULL) { ptr->next = tmp; ptr = ptr->next; ptr->next = NULL; } return list; } void of_find_type_devices_free(struct device_node *root) { struct device_node *cursor = root; struct device_node *fwd; while (cursor) { fwd = cursor->next; of_free_node(cursor); cursor = fwd; } } struct device_node *of_find_node_by_path(const char *path) { struct device_node *tmp = NULL; char buf[PATH_MAX]; struct stat fstats; _of_make_compat_path(path, buf); if (stat(buf, &fstats) < 0) return NULL; tmp = _of_populate_node(buf, NULL); return tmp; } struct device_node *of_find_node_by_phandle(uint32_t phandle) { uint32_t *ptr = malloc(4); if(!ptr) of_error("malloc()"); *ptr = phandle; _of_find_node_by_parse(OF_ROOT, (void *)ptr, OF_SEARCH_PHDL, 0); free(ptr); return _of_return_nodes(_p_array, &_p_idx, &_t_sem, 0); } struct device_node *of_find_node_by_type(const char *device_type, int type) { if (!_t_sem) _of_find_node_by_parse(OF_ROOT, device_type, OF_SEARCH_TYPE, type); return _of_return_nodes(_t_array, &_t_idx, &_t_sem, type); } pommed-1.1/pommed/pmac/oflib/of_standard.h0000664000175000017500000000135710550754134020137 0ustar julienjulien/*************************************************************************** * (C) Copyright 2006 Alastair Poole. netstar@gatheringofgray.com) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef __OF_STANDARD__ #define __OF_STANDARD__ void of_error(char *error); void of_free_node(struct device_node *node); #endif pommed-1.1/pommed/cd_eject.c0000664000175000017500000000337610543467300015374 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: cd_eject.c 186 2006-12-24 12:12:48Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "pommed.h" #include "conffile.h" #include "cd_eject.h" #include "dbus.h" void cd_eject(void) { char cmd[128]; int ret; if (!eject_cfg.enabled) return; strcpy(cmd, CD_EJECT_CMD " "); strncat(cmd, eject_cfg.device, sizeof(cmd) - 1); ret = system(cmd); if (WEXITSTATUS(ret) != 0) { /* 127 means "shell not available" */ if (WEXITSTATUS(ret) != 127) logmsg(LOG_WARNING, "CD ejection failed, eject returned %d", WEXITSTATUS(ret)); return; } mbpdbus_send_cd_eject(); } void cd_eject_fix_config(void) { if (eject_cfg.device == NULL) { eject_cfg.enabled = 0; return; } if (strlen(eject_cfg.device) > 100) { eject_cfg.enabled = 0; logmsg(LOG_INFO, "CD/DVD device path too long, CD ejection disabled"); return; } } pommed-1.1/pommed/audio.c0000664000175000017500000001373610543467300014736 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: audio.c 186 2006-12-24 12:12:48Z julien $ * * Copyright (C) 2006 Romain Beauxis * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "pommed.h" #include "conffile.h" #include "audio.h" #include "dbus.h" struct _audio_info audio_info; static snd_mixer_t *mixer_hdl; static snd_mixer_elem_t *vol_elem; static snd_mixer_elem_t *spkr_elem; static snd_mixer_elem_t *head_elem; static long vol_min; static long vol_max; static long vol_step; static int play; void audio_step(int dir) { long vol; long newvol; if (mixer_hdl == NULL) return; if (vol_elem == NULL) return; snd_mixer_handle_events(mixer_hdl); if (!snd_mixer_selem_is_active(vol_elem)) return; snd_mixer_selem_get_playback_volume(vol_elem, 0, &vol); logdebug("Mixer volume: %ld\n", vol); if (dir == STEP_UP) { newvol = vol + vol_step; if (newvol > vol_max) newvol = vol_max; logdebug("Audio stepping +%ld -> %ld\n", vol_step, newvol); } else if (dir == STEP_DOWN) { newvol = vol - vol_step; if (newvol < vol_min) newvol = vol_min; logdebug("Audio stepping -%ld -> %ld\n", vol_step, newvol); } else return; snd_mixer_selem_set_playback_volume(vol_elem, 0, newvol); if (snd_mixer_selem_is_playback_mono(vol_elem) == 0) snd_mixer_selem_set_playback_volume(vol_elem, 1, newvol); mbpdbus_send_audio_volume(newvol, vol); audio_info.level = newvol; } static void audio_set_mute_elem(snd_mixer_elem_t *elem) { if (snd_mixer_selem_is_active(elem) && snd_mixer_selem_has_playback_switch(elem)) { snd_mixer_selem_set_playback_switch(elem, 0, play); if (snd_mixer_selem_is_playback_mono(elem) == 0) snd_mixer_selem_set_playback_switch(elem, 1, play); } } void audio_toggle_mute(void) { if (mixer_hdl == NULL) return; snd_mixer_handle_events(mixer_hdl); play = !play; if (spkr_elem != NULL) audio_set_mute_elem(spkr_elem); if (head_elem != NULL) audio_set_mute_elem(head_elem); mbpdbus_send_audio_mute(!play); audio_info.muted = !play; } int audio_init(void) { snd_mixer_elem_t *elem; snd_mixer_selem_id_t *sid; double dvol; long vol; int ret; vol_elem = NULL; spkr_elem = NULL; head_elem = NULL; play = 1; ret = snd_mixer_open(&mixer_hdl, 0); if (ret < 0) { logdebug("Failed to open mixer: %s\n", snd_strerror(ret)); mixer_hdl = NULL; return -1; } ret = snd_mixer_attach(mixer_hdl, audio_cfg.card); if (ret < 0) { logdebug("Failed to attach mixer: %s\n", snd_strerror(ret)); snd_mixer_close(mixer_hdl); return -1; } ret = snd_mixer_selem_register(mixer_hdl, NULL, NULL); if (ret < 0) { logdebug("Failed to register mixer: %s\n", snd_strerror(ret)); snd_mixer_detach(mixer_hdl, audio_cfg.card); snd_mixer_close(mixer_hdl); return -1; } ret = snd_mixer_load(mixer_hdl); if (ret < 0) { logdebug("Failed to load mixer: %s\n", snd_strerror(ret)); snd_mixer_detach(mixer_hdl, audio_cfg.card); snd_mixer_close(mixer_hdl); return -1; } /* Grab interesting elements */ snd_mixer_selem_id_alloca(&sid); for (elem = snd_mixer_first_elem(mixer_hdl); elem; elem = snd_mixer_elem_next(elem)) { snd_mixer_selem_get_id(elem, sid); if (strcmp(snd_mixer_selem_id_get_name(sid), audio_cfg.vol) == 0) vol_elem = elem; if (strcmp(snd_mixer_selem_id_get_name(sid), audio_cfg.spkr) == 0) spkr_elem = elem; if (strcmp(snd_mixer_selem_id_get_name(sid), audio_cfg.head) == 0) head_elem = elem; } logdebug("Audio init: volume %s, speakers %s, headphones %s\n", (vol_elem == NULL) ? "NOK" : "OK", (spkr_elem == NULL) ? "NOK" : "OK", (head_elem == NULL) ? "NOK" : "OK"); if ((vol_elem == NULL) || ((spkr_elem == NULL) && (head_elem == NULL))) { logdebug("Failed to open required mixer elements\n"); audio_cleanup(); return -1; } /* Get min & max volume */ snd_mixer_selem_get_playback_volume_range(vol_elem, &vol_min, &vol_max); dvol = (double)(vol_max - vol_min) / 100.0; vol_step = (long)(dvol * (double)audio_cfg.step); logdebug("Audio init: min %ld, max %ld, step %ld\n", vol_min, vol_max, vol_step); /* Set initial volume if enabled */ if (audio_cfg.init > -1) { dvol *= (double)audio_cfg.init; vol = (long)dvol; if (vol > vol_max) vol = vol_max; snd_mixer_selem_set_playback_volume(vol_elem, 0, vol); if (snd_mixer_selem_is_playback_mono(vol_elem) == 0) snd_mixer_selem_set_playback_volume(vol_elem, 1, vol); } snd_mixer_handle_events(mixer_hdl); snd_mixer_selem_get_playback_volume(vol_elem, 0, &vol); audio_info.level = vol; audio_info.max = vol_max; audio_info.muted = !play; return 0; } void audio_cleanup(void) { if (mixer_hdl != NULL) { snd_mixer_detach(mixer_hdl, audio_cfg.card); snd_mixer_close(mixer_hdl); mixer_hdl = NULL; } } void audio_fix_config(void) { if (audio_cfg.init < 0) audio_cfg.init = -1; if (audio_cfg.init > 100) audio_cfg.init = 100; if (audio_cfg.step < 1) audio_cfg.step = 1; if (audio_cfg.step > 50) audio_cfg.step = 50; } pommed-1.1/pommed/dbus.h0000664000175000017500000000102410543460616014565 0ustar julienjulien/* * $Id: dbus.h 183 2006-12-24 11:16:30Z julien $ */ #ifndef __MBPDBUS_H__ #define __MBPDBUS_H__ void mbpdbus_send_lcd_backlight(int cur, int prev); void mbpdbus_send_kbd_backlight(int cur, int prev); void mbpdbus_send_ambient_light(int l, int l_prev, int r, int r_prev); void mbpdbus_send_audio_volume(int cur, int prev); void mbpdbus_send_audio_mute(int mute); void mbpdbus_send_cd_eject(void); void mbpdbus_process_requests(void); int mbpdbus_init(void); void mbpdbus_cleanup(void); #endif /* !__MBPDBUS_H__ */ pommed-1.1/pommed/cd_eject.h0000664000175000017500000000036610543460616015400 0ustar julienjulien/* * $Id: cd_eject.h 183 2006-12-24 11:16:30Z julien $ */ #ifndef __CD_EJECT_H__ #define __CD_EJECT_H__ #define CD_EJECT_CMD "/usr/bin/eject" void cd_eject(void); void cd_eject_fix_config(void); #endif /* !__CD_EJECT_H__ */ pommed-1.1/pommed/audio.h0000664000175000017500000000055710543460616014743 0ustar julienjulien/* * $Id: audio.h 183 2006-12-24 11:16:30Z julien $ */ #ifndef __AUDIO_H__ #define __AUDIO_H__ struct _audio_info { int level; int max; int muted; }; extern struct _audio_info audio_info; void audio_step(int dir); void audio_toggle_mute(void); int audio_init(void); void audio_cleanup(void); void audio_fix_config(void); #endif /* !__AUDIO_H__ */ pommed-1.1/pommed/evdev.c0000664000175000017500000001703310550754134014742 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: evdev.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include "pommed.h" #include "conffile.h" #include "evdev.h" #include "kbd_backlight.h" #include "lcd_backlight.h" #include "cd_eject.h" #include "audio.h" #define BITS_PER_LONG (sizeof(long) * 8) #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) #define OFF(x) ((x)%BITS_PER_LONG) #define BIT(x) (1UL<> OFF(bit)) & 1) void evdev_process_events(int fd) { int ret; struct input_event ev; ret = read(fd, &ev, sizeof(struct input_event)); if (ret != sizeof(struct input_event)) return; if (ev.type == EV_KEY) { /* key released - we don't care */ if (ev.value == 0) return; switch (ev.code) { case K_LCD_BCK_DOWN: logdebug("\nKEY: LCD backlight down\n"); mops->lcd_backlight_step(STEP_DOWN); break; case K_LCD_BCK_UP: logdebug("\nKEY: LCD backlight up\n"); mops->lcd_backlight_step(STEP_UP); break; case K_AUDIO_MUTE: logdebug("\nKEY: audio mute\n"); audio_toggle_mute(); break; case K_AUDIO_DOWN: logdebug("\nKEY: audio down\n"); audio_step(STEP_DOWN); break; case K_AUDIO_UP: logdebug("\nKEY: audio up\n"); audio_step(STEP_UP); break; case K_VIDEO_TOGGLE: logdebug("\nKEY: video toggle\n"); break; case K_KBD_BCK_OFF: logdebug("\nKEY: keyboard backlight off\n"); if (!has_kbd_backlight()) break; kbd_backlight_off(); break; case K_KBD_BCK_DOWN: logdebug("\nKEY: keyboard backlight down\n"); if (!has_kbd_backlight()) break; kbd_backlight_step(STEP_DOWN); break; case K_KBD_BCK_UP: logdebug("\nKEY: keyboard backlight up\n"); if (!has_kbd_backlight()) break; kbd_backlight_step(STEP_UP); break; case K_CD_EJECT: logdebug("\nKEY: CD eject\n"); cd_eject(); break; case K_IR_FFWD: logdebug("\nKEY: IR fast forward\n"); break; case K_IR_REWD: logdebug("\nKEY: IR rewind\n"); break; case K_IR_PLAY: logdebug("\nKEY: IR play/pause\n"); break; case K_IR_MENU: logdebug("\nKEY: IR menu\n"); break; default: #if 0 logdebug("\nKEY: %x\n", ev.code); #endif /* 0 */ break; } } } /* PowerBook G4 Titanium */ int evdev_is_adb(unsigned short *id) { unsigned short product = id[ID_PRODUCT]; if (id[ID_BUS] != BUS_ADB) return 0; if (id[ID_VENDOR] != 1) return 0; return ((product == ADB_PRODUCT_ID_KEYBOARD) || (product == ADB_PRODUCT_ID_PBBUTTONS)); } /* PowerBook G4 */ int evdev_is_fountain(unsigned short *id) { unsigned short product = id[ID_PRODUCT]; if (id[ID_BUS] != BUS_USB) return 0; if (id[ID_VENDOR] != USB_VENDOR_ID_APPLE) return 0; return ((product == USB_PRODUCT_ID_FOUNTAIN_ANSI) || (product == USB_PRODUCT_ID_FOUNTAIN_ISO) || (product == USB_PRODUCT_ID_FOUNTAIN_JIS)); } #ifndef __powerpc__ /* Core Duo MacBook & MacBook Pro */ int evdev_is_geyser3(unsigned short *id) { unsigned short product = id[ID_PRODUCT]; if (id[ID_BUS] != BUS_USB) return 0; if (id[ID_VENDOR] != USB_VENDOR_ID_APPLE) return 0; return ((product == USB_PRODUCT_ID_GEYSER3_ANSI) || (product == USB_PRODUCT_ID_GEYSER3_ISO) || (product == USB_PRODUCT_ID_GEYSER3_JIS)); } /* Core2 Duo MacBook & MacBook Pro */ int evdev_is_geyser4(unsigned short *id) { unsigned short product = id[ID_PRODUCT]; if (id[ID_BUS] != BUS_USB) return 0; if (id[ID_VENDOR] != USB_VENDOR_ID_APPLE) return 0; return ((product == USB_PRODUCT_ID_GEYSER4_ANSI) || (product == USB_PRODUCT_ID_GEYSER4_ISO) || (product == USB_PRODUCT_ID_GEYSER4_JIS)); } /* Apple Remote IR Receiver */ static int evdev_is_appleir(unsigned short *id) { unsigned short product = id[ID_PRODUCT]; if (id[ID_BUS] != BUS_USB) return 0; if (id[ID_VENDOR] != USB_VENDOR_ID_APPLE) return 0; return (product == USB_PRODUCT_ID_APPLEIR); } #endif /* !__powerpc__ */ int evdev_open(struct pollfd **fds) { int ret; int i, j; int found = 0; int fd[32]; unsigned short id[4]; unsigned long bit[EV_MAX][NBITS(KEY_MAX)]; char devname[256]; char evdev[32]; for (i = 0; i < EVDEV_MAX; i++) { ret = snprintf(evdev, 32, "%s%d", EVDEV_BASE, i); if ((ret <= 0) || (ret > 31)) return -1; fd[i] = open(evdev, O_RDWR); if (fd[i] < 0) { if (errno != ENOENT) logmsg(LOG_WARNING, "Could not open %s: %s", evdev, strerror(errno)); continue; } devname[0] = '\0'; ioctl(fd[i], EVIOCGNAME(sizeof(devname)), devname); logdebug("Investigating evdev %d [%s]\n", i, devname); ioctl(fd[i], EVIOCGID, id); #ifdef __powerpc__ if (!mops->evdev_identify(id)) #else if ((!mops->evdev_identify(id)) && !(appleir_cfg.enabled && evdev_is_appleir(id))) #endif /* __powerpc__ */ { logdebug("Discarding evdev %d vid 0x%04x, pid 0x%04x\n", i, id[ID_VENDOR], id[ID_PRODUCT]); close(fd[i]); fd[i] = -1; continue; } memset(bit, 0, sizeof(bit)); ioctl(fd[i], EVIOCGBIT(0, EV_MAX), bit[0]); if (!test_bit(1, bit[0])) { logdebug("Discarding evdev %d with no key event type (not a keyboard)\n", i); close(fd[i]); fd[i] = -1; continue; } else if (test_bit(2, bit[0])) { logdebug("Discarding evdev %d with event type >= 2 (not a keyboard)\n", i); close(fd[i]); fd[i] = -1; continue; } found++; } logdebug("Found %d devices\n", found); *fds = (struct pollfd *) malloc(found * sizeof(struct pollfd)); if (*fds == NULL) { for (i = 0; i < EVDEV_MAX; i++) { if (fd[i] > 0) close(fd[i]); } logmsg(LOG_ERR, "Out of memory for %d pollfd structs", found); return -1; } j = 0; for (i = 0; i < EVDEV_MAX && j < found; i++) { if (fd[i] < 0) continue; (*fds)[j].fd = fd[i]; (*fds)[j].events = POLLIN; j++; } return found; } void evdev_close(struct pollfd **fds, int nfds) { int i; if (*fds != NULL) { for (i = 0; i < nfds; i++) close((*fds)[i].fd); free(*fds); } *fds = NULL; } int evdev_reopen(struct pollfd **fds, int nfds) { int i; evdev_close(fds, nfds); /* When resuming, we need to reopen event devices which * disappear at suspend time. We need to wait for udev to * recreate the device nodes. * Wait for up to 12 seconds, 24 * 0.5 seconds */ for (i = 0; i < 24; i++) { usleep(500000); nfds = evdev_open(fds); if (nfds > 0) break; } return nfds; } pommed-1.1/pommed/kbd_backlight.h0000664000175000017500000000140010550754134016375 0ustar julienjulien/* * $Id: kbd_backlight.h 244 2007-01-09 18:01:00Z julien $ */ #ifndef __KBD_BACKLIGHT_H__ #define __KBD_BACKLIGHT_H__ #ifdef __powerpc__ int kbd_get_lmuaddr(void); char* kbd_get_i2cdev(int addr); int kbd_probe_lmu(int addr, char* i2cdev); #else #define KBD_BACKLIGHT "/sys/class/leds/smc:kbd_backlight/brightness" #endif /* __powerpc__ */ #define KBD_BACKLIGHT_OFF 0 #define KBD_BACKLIGHT_MAX 255 struct _kbd_bck_info { int level; int max; }; extern struct _kbd_bck_info kbd_bck_info; int has_kbd_backlight(void); void kbd_backlight_off(void); void kbd_backlight_step(int dir); void kbd_backlight_init(void); void kbd_backlight_ambient_check(void); void kbd_backlight_fix_config(void); #endif /* !__KBD_BACKLIGHT_H__ */ pommed-1.1/pommed/evdev.h0000664000175000017500000000415510550754134014750 0ustar julienjulien/* * $Id: evdev.h 244 2007-01-09 18:01:00Z julien $ */ #ifndef __EVDEV_H__ #define __EVDEV_H__ /****** ADB Devices ******/ /* Keyboard as found on the PowerBook3,2 */ #define ADB_PRODUCT_ID_KEYBOARD 0x22c4 /* Special PowerBook buttons as found on the PowerBook3,2 */ #define ADB_PRODUCT_ID_PBBUTTONS 0x771f /****** USB Devices ******/ #define USB_VENDOR_ID_APPLE 0x05ac /* Apple Fountain keyboard + trackpad */ #define USB_PRODUCT_ID_FOUNTAIN_ANSI 0x020e #define USB_PRODUCT_ID_FOUNTAIN_ISO 0x020f #define USB_PRODUCT_ID_FOUNTAIN_JIS 0x0210 /* Apple Geyser III keyboard + trackpad */ #define USB_PRODUCT_ID_GEYSER3_ANSI 0x0217 #define USB_PRODUCT_ID_GEYSER3_ISO 0x0218 #define USB_PRODUCT_ID_GEYSER3_JIS 0x0219 /* Apple Geyser IV keyboard + trackpad */ #define USB_PRODUCT_ID_GEYSER4_ANSI 0x021a #define USB_PRODUCT_ID_GEYSER4_ISO 0x021b #define USB_PRODUCT_ID_GEYSER4_JIS 0x021c /* Apple Remote IR Receiver */ #define USB_PRODUCT_ID_APPLEIR 0x8240 /* Keyboard hotkeys */ #define K_LCD_BCK_DOWN 0xe0 #define K_LCD_BCK_UP 0xe1 #define K_AUDIO_MUTE 0x71 #define K_AUDIO_DOWN 0x72 #define K_AUDIO_UP 0x73 #define K_VIDEO_TOGGLE 0xe3 #define K_KBD_BCK_OFF 0xe4 #define K_KBD_BCK_DOWN 0xe5 #define K_KBD_BCK_UP 0xe6 #define K_CD_EJECT 0xa1 /* Apple Remote controller keys */ /* audio up/down use the same codes as the keyboard */ #define K_IR_FFWD 0xa3 #define K_IR_REWD 0xa5 #define K_IR_PLAY 0xa4 #define K_IR_MENU 0x8b #define EVDEV_BASE "/dev/input/event" #define EVDEV_MAX 32 void evdev_process_events(int fd); #ifdef __powerpc__ int evdev_is_adb(unsigned short *id); int evdev_is_fountain(unsigned short *id); #else int evdev_is_geyser3(unsigned short *id); int evdev_is_geyser4(unsigned short *id); #endif /* __powerpc__ */ int evdev_open(struct pollfd **fds); void evdev_close(struct pollfd **fds, int nfds); int evdev_reopen(struct pollfd **fds, int nfds); #endif /* !__EVDEV_H__ */ pommed-1.1/pommed/lcd_backlight.h0000664000175000017500000000212010550754134016377 0ustar julienjulien/* * $Id: lcd_backlight.h 244 2007-01-09 18:01:00Z julien $ */ #ifndef __LCD_BACKLIGHT_H__ #define __LCD_BACKLIGHT_H__ struct _lcd_bck_info { int level; int max; }; extern struct _lcd_bck_info lcd_bck_info; #ifndef __powerpc__ /* x1600_backlight.c */ #define X1600_BACKLIGHT_OFF 0 #define X1600_BACKLIGHT_MAX 255 void x1600_backlight_step(int dir); int x1600_backlight_probe(void); void x1600_backlight_fix_config(void); /* gma950_backlight.c */ #define GMA950_BACKLIGHT_MIN 0x1f /* Beware, GMA950_BACKLIGHT_MAX is dynamic, see source */ void gma950_backlight_step(int dir); int gma950_backlight_probe(void); #else /* r9600_backlight.c */ #define R9600_BACKLIGHT_OFF 0 #define R9600_BACKLIGHT_MAX 127 void r9600_backlight_step(int dir); int r9600_backlight_probe(void); void r9600_backlight_fix_config(void); /* r128_backlight.c */ #define R128_BACKLIGHT_OFF 0 #define R128_BACKLIGHT_MAX 127 void r128_backlight_step(int dir); int r128_backlight_probe(void); void r128_backlight_fix_config(void); #endif /* !__powerpc__ */ #endif /* !__LCD_BACKLIGHT_H__ */ pommed-1.1/pommed/pommed.c0000664000175000017500000003244410550754134015115 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: pommed.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef __powerpc__ # include # define check_machine() check_machine_smbios() #else # define check_machine() check_machine_pmu() #endif /* __powerpc__ */ #include #include "pommed.h" #include "kbd_backlight.h" #include "lcd_backlight.h" #include "cd_eject.h" #include "evdev.h" #include "conffile.h" #include "audio.h" #include "dbus.h" /* Machine-specific operations */ struct machine_ops *mops; #ifdef __powerpc__ /* PowerBook machines */ /* PowerBook3,2 */ struct machine_ops pb32_ops = { .type = MACHINE_POWERBOOK_32, .lcd_backlight_probe = r128_backlight_probe, .lcd_backlight_step = r128_backlight_step, .evdev_identify = evdev_is_adb, }; /* PowerBook5,5 */ struct machine_ops pb55_ops = { .type = MACHINE_POWERBOOK_55, .lcd_backlight_probe = r9600_backlight_probe, .lcd_backlight_step = r9600_backlight_step, .evdev_identify = evdev_is_fountain, }; /* PowerBook5,6 / PowerBook G4 15" (Feb 2005) */ struct machine_ops pb56_ops = { .type = MACHINE_POWERBOOK_56, .lcd_backlight_probe = r9600_backlight_probe, .lcd_backlight_step = r9600_backlight_step, .evdev_identify = evdev_is_fountain, }; /* PowerBook5,7 */ struct machine_ops pb57_ops = { .type = MACHINE_POWERBOOK_57, .lcd_backlight_probe = r9600_backlight_probe, .lcd_backlight_step = r9600_backlight_step, .evdev_identify = evdev_is_fountain, }; #else /* MacBook Pro machines */ /* MacBookPro1,1 / MacBookPro1,2 (Core Duo) */ struct machine_ops mbp1_ops = { .type = MACHINE_MACBOOKPRO_1, .lcd_backlight_probe = x1600_backlight_probe, .lcd_backlight_step = x1600_backlight_step, .evdev_identify = evdev_is_geyser3, }; /* MacBookPro2,1 / MacBookPro2,2 (Core2 Duo) */ struct machine_ops mbp2_ops = { .type = MACHINE_MACBOOKPRO_2, .lcd_backlight_probe = x1600_backlight_probe, .lcd_backlight_step = x1600_backlight_step, .evdev_identify = evdev_is_geyser4, }; /* MacBook machines */ /* MacBook1,1 (Core Duo) */ struct machine_ops mb1_ops = { .type = MACHINE_MACBOOK_1, .lcd_backlight_probe = gma950_backlight_probe, .lcd_backlight_step = gma950_backlight_step, .evdev_identify = evdev_is_geyser3, }; /* MacBook2,1 (Core2 Duo) */ struct machine_ops mb2_ops = { .type = MACHINE_MACBOOK_2, .lcd_backlight_probe = gma950_backlight_probe, .lcd_backlight_step = gma950_backlight_step, .evdev_identify = evdev_is_geyser4, }; #endif /* __powerpc__ */ /* debug mode */ int debug = 0; int console = 0; /* Used by signal handlers */ static int running; void logmsg(int level, char *fmt, ...) { va_list ap; va_start(ap, fmt); if (console) { switch (level) { case LOG_INFO: fprintf(stdout, "I: "); break; case LOG_WARNING: fprintf(stdout, "W: "); break; case LOG_ERR: fprintf(stdout, "E: "); break; default: break; } vfprintf(stdout, fmt, ap); fprintf(stdout, "\n"); } else { vsyslog(level | LOG_DAEMON, fmt, ap); } va_end(ap); } void logdebug(char *fmt, ...) { va_list ap; va_start(ap, fmt); if (debug) vfprintf(stderr, fmt, ap); va_end(ap); } void kbd_set_fnmode(void) { FILE *fp; if ((general_cfg.fnmode < 1) || (general_cfg.fnmode > 2)) general_cfg.fnmode = 1; fp = fopen(KBD_FNMODE_FILE, "a"); if (fp == NULL) { logmsg(LOG_INFO, "Could not open %s: %s", KBD_FNMODE_FILE, strerror(errno)); return; } fprintf(fp, "%d", general_cfg.fnmode); fclose(fp); } #ifdef __powerpc__ static machine_type check_machine_pmu(void) { int fd; int n; int ret = MACHINE_UNKNOWN; char buffer[128]; /* Check copyright node, look for "Apple Computer, Inc." */ fd = open("/proc/device-tree/copyright", O_RDONLY); if (fd < 0) { logmsg(LOG_ERR, "Could not open /proc/device-tree/copyright"); return ret; } n = read(fd, buffer, sizeof(buffer) - 1); if (n < 1) { logmsg(LOG_ERR, "Error reading /proc/device-tree/copyright"); close(fd); return ret; } close(fd); buffer[n] = '\0'; logdebug("device-tree copyright node: [%s]\n", buffer); if (strstr(buffer, "Apple Computer, Inc.") == NULL) return ret; ret = MACHINE_MAC_UNKNOWN; /* Grab machine identifier string */ fd = open("/proc/device-tree/model", O_RDONLY); if (fd < 0) { logmsg(LOG_ERR, "Could not open /proc/device-tree/model"); return ret; } n = read(fd, buffer, sizeof(buffer) - 1); if (n < 1) { logmsg(LOG_ERR, "Error reading /proc/device-tree/model"); close(fd); return ret; } close(fd); buffer[n] = '\0'; logdebug("device-tree model node: [%s]\n", buffer); /* PowerBook G4 Titanium 15" (December 2000) */ if (strncmp(buffer, "PowerBook3,2", 12) == 0) ret = MACHINE_POWERBOOK_32; /* PowerBook G4 Aluminium 17" (April 2004) */ else if (strncmp(buffer, "PowerBook5,5", 12) == 0) ret = MACHINE_POWERBOOK_55; /* PowerBook G4 Aluminium 15" (February 2005) */ else if (strncmp(buffer, "PowerBook5,6", 12) == 0) ret = MACHINE_POWERBOOK_56; /* PowerBook G4 Aluminium 17" (February 2005) */ else if (strncmp(buffer, "PowerBook5,7", 12) == 0) ret = MACHINE_POWERBOOK_57; else logmsg(LOG_ERR, "Unknown Apple machine: %s", buffer); if (ret != MACHINE_MAC_UNKNOWN) logmsg(LOG_INFO, "PMU machine check: running on a %s", buffer); return ret; } #else static machine_type check_machine_smbios(void) { int ret = MACHINE_UNKNOWN; const char *prop; if (geteuid() != 0) { logmsg(LOG_ERR, "root privileges needed for SMBIOS machine detection"); return MACHINE_ERROR; } /* Check vendor name */ prop = SMBIOSGetVendorName(); logdebug("SMBIOS vendor name: [%s]\n", prop); if (strcmp(prop, "Apple Computer, Inc.") == 0) ret = MACHINE_MAC_UNKNOWN; SMBIOSFreeMemory(prop); if (ret != MACHINE_MAC_UNKNOWN) return ret; /* Check system name */ prop = SMBIOSGetSystemName(); logdebug("SMBIOS system name: [%s]\n", prop); /* Core Duo MacBook Pro 15" (January 2006) & 17" (April 2006) */ if ((strcmp(prop, "MacBookPro1,1") == 0) || (strcmp(prop, "MacBookPro1,2") == 0)) ret = MACHINE_MACBOOKPRO_1; /* Core2 Duo MacBook Pro 17" & 15" (October 2006) */ else if ((strcmp(prop, "MacBookPro2,1") == 0) || (strcmp(prop, "MacBookPro2,2") == 0)) ret = MACHINE_MACBOOKPRO_2; /* Core Duo MacBook (May 2006) */ else if (strcmp(prop, "MacBook1,1") == 0) ret = MACHINE_MACBOOK_1; /* Core2 Duo MacBook (November 2006) */ else if (strcmp(prop, "MacBook2,1") == 0) ret = MACHINE_MACBOOK_2; else logmsg(LOG_ERR, "Unknown Apple machine: %s", prop); if (ret != MACHINE_MAC_UNKNOWN) logmsg(LOG_INFO, "SMBIOS machine check: running on a %s", prop); SMBIOSFreeMemory(prop); return ret; } #endif /* __powerpc__ */ static void usage(void) { printf("pommed v" M_VERSION " ($Rev: 244 $) Apple laptops hotkeys handler\n"); printf("Copyright (C) 2006 Julien BLACHE \n"); printf("Usage:\n"); printf("\tpommed\t-- start pommed as a daemon\n"); printf("\tpommed -v\t-- print version and exit\n"); printf("\tpommed -f\t-- run in the foreground with log messages\n"); printf("\tpommed -d\t-- run in the foreground with debug messages\n"); } void sig_int_term_handler(int signal) { running = 0; } int main (int argc, char **argv) { int ret; int c; int i; FILE *pidfile; struct pollfd *fds; int nfds; int reopen; machine_type machine; struct timeval tv_now; struct timeval tv_als; struct timeval tv_diff; while ((c = getopt(argc, argv, "fdv")) != -1) { switch (c) { case 'f': console = 1; break; case 'd': debug = 1; console = 1; break; case 'v': printf("pommed v" M_VERSION " ($Rev: 244 $) Apple laptops hotkeys handler\n"); printf("Copyright (C) 2006 Julien BLACHE \n"); exit(0); break; default: usage(); exit(-1); break; } } if (!console) { openlog("pommed", LOG_PID, LOG_DAEMON); } logmsg(LOG_INFO, "pommed v" M_VERSION " ($Rev: 244 $) Apple laptops hotkeys handler"); logmsg(LOG_INFO, "Copyright (C) 2006 Julien BLACHE "); /* Load our configuration */ ret = config_load(); if (ret < 0) { exit(-1); } /* Identify the machine we're running on */ machine = check_machine(); switch (machine) { #ifndef __powerpc__ case MACHINE_MACBOOKPRO_1: mops = &mbp1_ops; break; case MACHINE_MACBOOKPRO_2: mops = &mbp2_ops; break; case MACHINE_MACBOOK_1: mops = &mb1_ops; break; case MACHINE_MACBOOK_2: mops = &mb2_ops; break; #else case MACHINE_POWERBOOK_32: mops = &pb32_ops; break; case MACHINE_POWERBOOK_55: mops = &pb55_ops; break; case MACHINE_POWERBOOK_56: mops = &pb56_ops; break; case MACHINE_POWERBOOK_57: mops = &pb57_ops; break; #endif /* !__powerpc__ */ case MACHINE_MAC_UNKNOWN: logmsg(LOG_ERR, "Unknown Apple machine"); exit(1); break; case MACHINE_UNKNOWN: logmsg(LOG_ERR, "Unknown non-Apple machine"); exit(1); break; case MACHINE_ERROR: exit(1); break; } ret = mops->lcd_backlight_probe(); if (ret < 0) { logmsg(LOG_ERR, "No LCD backlight found"); exit(1); } nfds = evdev_open(&fds); if (nfds < 1) { logmsg(LOG_ERR, "No suitable event devices found"); exit(1); } kbd_set_fnmode(); kbd_backlight_init(); ret = audio_init(); if (ret < 0) { logmsg(LOG_WARNING, "Audio initialization failed, audio support disabled"); } ret = mbpdbus_init(); if (ret < 0) { logmsg(LOG_WARNING, "Could not connect to DBus system bus"); } if (!console) { /* * Detach from the console */ if (daemon(0, 0) != 0) { logmsg(LOG_ERR, "daemon() failed: %s", strerror(errno)); evdev_close(&fds, nfds); exit(-1); } } pidfile = fopen(PIDFILE, "w"); if (pidfile == NULL) { logmsg(LOG_WARNING, "Could not open pidfile %s: %s", PIDFILE, strerror(errno)); evdev_close(&fds, nfds); exit(-1); } fprintf(pidfile, "%d\n", getpid()); fclose(pidfile); gettimeofday(&tv_als, NULL); running = 1; signal(SIGINT, sig_int_term_handler); signal(SIGTERM, sig_int_term_handler); reopen = 0; while (running) { /* Attempt to reopen event devices, typically after resuming */ if (reopen) { nfds = evdev_reopen(&fds, nfds); if (nfds < 1) { logmsg(LOG_ERR, "No suitable event devices found (reopen)"); break; } /* Re-set the keyboard mode * When we need to reopen the event devices, it means we've * just resumed from sleep */ kbd_set_fnmode(); reopen = 0; } ret = poll(fds, nfds, LOOP_TIMEOUT); if (ret < 0) /* error */ { if (errno != EINTR) { logmsg(LOG_ERR, "poll() error: %s", strerror(errno)); break; } } else if (ret != 0) { for (i = 0; i < nfds; i++) { /* the event devices cease to exist when suspending */ if (fds[i].revents & (POLLERR | POLLHUP | POLLNVAL)) { logmsg(LOG_WARNING, "Error condition signaled on evdev, reopening"); reopen = 1; break; } if (fds[i].revents & POLLIN) evdev_process_events(fds[i].fd); } if (kbd_cfg.auto_on && has_kbd_backlight()) { /* is it time to chek the ambient light sensors ? */ gettimeofday(&tv_now, NULL); tv_diff.tv_sec = tv_now.tv_sec - tv_als.tv_sec; if (tv_diff.tv_sec < 0) tv_diff.tv_sec = 0; if (tv_diff.tv_sec == 0) { tv_diff.tv_usec = tv_now.tv_usec - tv_als.tv_usec; } else { tv_diff.tv_sec--; tv_diff.tv_usec = 1000000 - tv_als.tv_usec + tv_now.tv_usec; tv_diff.tv_usec += tv_diff.tv_sec * 1000000; } if (tv_diff.tv_usec >= (1000 * LOOP_TIMEOUT)) { kbd_backlight_ambient_check(); tv_als = tv_now; } } } else if (kbd_cfg.auto_on && has_kbd_backlight()) { /* poll() timed out, check ambient light sensors */ kbd_backlight_ambient_check(); gettimeofday(&tv_als, NULL); } /* Process DBus requests */ mbpdbus_process_requests(); } evdev_close(&fds, nfds); mbpdbus_cleanup(); config_cleanup(); logmsg(LOG_INFO, "Exiting"); if (!console) closelog(); unlink(PIDFILE); return 0; } pommed-1.1/pommed/ambient.h0000664000175000017500000000071010543460616015250 0ustar julienjulien/* * $Id: ambient.h 183 2006-12-24 11:16:30Z julien $ */ #ifndef __AMBIENT_H__ #define __AMBIENT_H__ #define KBD_AMBIENT_SENSOR "/sys/devices/platform/applesmc/light" #define KBD_AMBIENT_MIN 0 #define KBD_AMBIENT_MAX 255 struct _ambient_info { int left; int right; int max; }; extern struct _ambient_info ambient_info; void ambient_get(int *r, int *l); void ambient_init(int *r, int *l); #endif /* !__AMBIENT_H__ */ pommed-1.1/pommed/mactel/0000775000175000017500000000000010550765203014725 5ustar julienjulienpommed-1.1/pommed/mactel/ambient.c0000664000175000017500000000355710543727306016526 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: ambient.c 200 2006-12-25 10:58:14Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include "../pommed.h" #include "../ambient.h" struct _ambient_info ambient_info; void ambient_get(int *r, int *l) { int fd; int ret; char buf[16]; char *p; fd = open(KBD_AMBIENT_SENSOR, O_RDONLY); if (fd < 0) { *r = -1; *l = -1; ambient_info.right = 0; ambient_info.left = 0; return; } ret = read(fd, buf, 16); close(fd); if ((ret <= 0) || (ret > 15)) { *r = -1; *l = -1; ambient_info.right = 0; ambient_info.left = 0; return; } buf[strlen(buf)] = '\0'; p = strchr(buf, ','); *p++ = '\0'; *r = atoi(p); p = buf + 1; *l = atoi(p); logdebug("Ambient light: right %d, left %d\n", *r, *l); ambient_info.right = *r; ambient_info.left = *l; } void ambient_init(int *r, int *l) { ambient_get(r, l); ambient_info.max = KBD_AMBIENT_MAX; ambient_info.left = *l; ambient_info.right = *r; } pommed-1.1/pommed/mactel/x1600_backlight.c0000664000175000017500000001214110543727306017662 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * Apple Macbook Pro LCD backlight control * * $Id: x1600_backlight.c 200 2006-12-25 10:58:14Z julien $ * * Copyright (C) 2006 Nicolas Boichat * Copyright (C) 2006 Julien BLACHE * + Adapted for pommed * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "../pommed.h" #include "../conffile.h" #include "../lcd_backlight.h" #include "../dbus.h" struct _lcd_bck_info lcd_bck_info; static int fd = -1; static char *memory = NULL; static long address = 0; static long length = 0; static inline unsigned int readl(const volatile void *addr) { return *(volatile unsigned int*) addr; } static inline void writel(unsigned int b, volatile void *addr) { *(volatile unsigned int*) addr = b; } #define INREG(addr) readl(memory+addr) #define OUTREG(addr,val) writel(val, memory+addr) static unsigned char x1600_backlight_get() { return INREG(0x7af8) >> 8; } static void x1600_backlight_set(unsigned char value) { OUTREG(0x7af8, 0x00000001 | ((unsigned int)value << 8)); } static int x1600_backlight_map(void) { unsigned int state; if ((address == 0) || (length == 0)) { logdebug("No probing done !\n"); return -1; } fd = open("/dev/mem", O_RDWR); if (fd < 0) { logmsg(LOG_WARNING, "Cannot open /dev/mem: %s", strerror(errno)); return -1; } memory = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, address); if (memory == MAP_FAILED) { logmsg(LOG_ERR, "mmap failed: %s", strerror(errno)); return -1; } /* Is it really necessary ? */ OUTREG(0x4dc, 0x00000005); state = INREG(0x7ae4); OUTREG(0x7ae4, state); return 0; } static void x1600_backlight_unmap(void) { munmap(memory, length); memory = NULL; close(fd); fd = -1; } void x1600_backlight_step(int dir) { int ret; int val; int newval; ret = x1600_backlight_map(); if (ret < 0) return; val = x1600_backlight_get(); if (dir == STEP_UP) { newval = val + lcd_x1600_cfg.step; if (newval > X1600_BACKLIGHT_MAX) newval = X1600_BACKLIGHT_MAX; logdebug("LCD stepping +%d -> %d\n", lcd_x1600_cfg.step, newval); } else if (dir == STEP_DOWN) { newval = val - lcd_x1600_cfg.step; if (newval < X1600_BACKLIGHT_OFF) newval = X1600_BACKLIGHT_OFF; logdebug("LCD stepping -%d -> %d\n", lcd_x1600_cfg.step, newval); } else return; x1600_backlight_set((unsigned char)newval); x1600_backlight_unmap(); mbpdbus_send_lcd_backlight(newval, val); lcd_bck_info.level = newval; } #define PCI_ID_VENDOR_ATI 0x1002 #define PCI_ID_PRODUCT_X1600 0x71c5 /* Look for an ATI Radeon Mobility X1600 */ int x1600_backlight_probe(void) { struct pci_access *pacc; struct pci_dev *dev; int ret; pacc = pci_alloc(); if (pacc == NULL) { logmsg(LOG_ERR, "Could not allocate PCI structs"); return -1; } pci_init(pacc); pci_scan_bus(pacc); /* Iterate over all devices */ for(dev = pacc->devices; dev; dev = dev->next) { pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES); /* ATI X1600 */ if ((dev->vendor_id == PCI_ID_VENDOR_ATI) && (dev->device_id == PCI_ID_PRODUCT_X1600)) { address = dev->base_addr[2]; length = dev->size[2]; } } pci_cleanup(pacc); if (!address) { logdebug("Failed to detect ATI X1600, aborting...\n"); return -1; } lcd_bck_info.max = X1600_BACKLIGHT_MAX; ret = x1600_backlight_map(); if (ret < 0) { lcd_bck_info.level = 0; return 0; } /* * Set the initial backlight level * The value has been sanity checked already */ if (lcd_x1600_cfg.init > -1) { x1600_backlight_set((unsigned char)lcd_x1600_cfg.init); } lcd_bck_info.level = x1600_backlight_get(); x1600_backlight_unmap(); return 0; } void x1600_backlight_fix_config(void) { if (lcd_x1600_cfg.init < 0) lcd_x1600_cfg.init = -1; if (lcd_x1600_cfg.init > X1600_BACKLIGHT_MAX) lcd_x1600_cfg.init = X1600_BACKLIGHT_MAX; if (lcd_x1600_cfg.step < 1) lcd_x1600_cfg.step = 1; if (lcd_x1600_cfg.step > (X1600_BACKLIGHT_MAX / 2)) lcd_x1600_cfg.step = X1600_BACKLIGHT_MAX / 2; } pommed-1.1/pommed/mactel/kbd_backlight.c0000664000175000017500000001310510543727306017645 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: kbd_backlight.c 200 2006-12-25 10:58:14Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include "../pommed.h" #include "../conffile.h" #include "../kbd_backlight.h" #include "../ambient.h" #include "../dbus.h" struct _kbd_bck_info kbd_bck_info; static struct { int auto_on; /* automatic */ int off; /* turned off ? */ int value; /* previous value */ int r_sens; /* right sensor */ int l_sens; /* left sensor */ } kbd_bck_status; int has_kbd_backlight(void) { return ((mops->type == MACHINE_MACBOOKPRO_1) || (mops->type == MACHINE_MACBOOKPRO_2)); } static int kbd_backlight_get(void) { int fd; int ret; char buf[8]; fd = open(KBD_BACKLIGHT, O_RDONLY); if (fd < 0) { logmsg(LOG_WARNING, "Could not open %s: %s", KBD_BACKLIGHT, strerror(errno)); return -1; } memset(buf, 0, 8); ret = read(fd, buf, 8); close(fd); if ((ret < 1) || (ret > 7)) return -1; ret = atoi(buf); logdebug("KBD backlight value is %d\n", ret); if ((ret < KBD_BACKLIGHT_OFF) || (ret > KBD_BACKLIGHT_MAX)) ret = -1; return ret; } static void kbd_backlight_set(int val) { int curval; FILE *fp; curval = kbd_backlight_get(); /* automatic backlight toggle by user */ if ((val == KBD_BACKLIGHT_OFF) && (kbd_bck_status.auto_on)) { if (!kbd_bck_status.off) { kbd_bck_status.off = 1; kbd_bck_status.value = curval; } else { kbd_bck_status.off = 0; val = kbd_bck_status.value; } } /* backlight turned on again by user */ if ((val > KBD_BACKLIGHT_OFF) && (kbd_bck_status.auto_on) && (kbd_bck_status.off)) kbd_bck_status.off = 0; if (val == curval) return; if ((val < KBD_BACKLIGHT_OFF) || (val > KBD_BACKLIGHT_MAX)) return; fp = fopen(KBD_BACKLIGHT, "a"); if (fp == NULL) { logmsg(LOG_WARNING, "Could not open %s: %s", KBD_BACKLIGHT, strerror(errno)); return; } fprintf(fp, "%d", val); fclose(fp); logdebug("KBD backlight value set to %d\n", val); mbpdbus_send_kbd_backlight(val, curval); kbd_bck_info.level = val; } void kbd_backlight_off(void) { kbd_backlight_set(KBD_BACKLIGHT_OFF); } void kbd_backlight_step(int dir) { int val; int newval; val = kbd_backlight_get(); if (val < 0) return; if (dir == STEP_UP) { newval = val + kbd_cfg.step; if (newval > KBD_BACKLIGHT_MAX) newval = KBD_BACKLIGHT_MAX; logdebug("KBD stepping +%d -> %d\n", kbd_cfg.step, newval); } else if (dir == STEP_DOWN) { newval = val - kbd_cfg.step; if (newval < KBD_BACKLIGHT_OFF) newval = KBD_BACKLIGHT_OFF; logdebug("KBD stepping -%d -> %d\n", kbd_cfg.step, newval); } else return; kbd_backlight_set(newval); } void kbd_backlight_init(void) { kbd_bck_status.auto_on = 0; kbd_bck_status.off = 0; if (!has_kbd_backlight()) { kbd_bck_status.value = 0; kbd_bck_status.r_sens = 0; kbd_bck_status.l_sens = 0; kbd_bck_info.level = 0; kbd_bck_info.level = 0; ambient_info.left = 0; ambient_info.right = 0; ambient_info.max = 0; return; } kbd_bck_status.value = kbd_backlight_get(); if (kbd_bck_status.value < 0) kbd_bck_status.value = 0; kbd_bck_info.level = kbd_bck_status.value; kbd_bck_info.max = KBD_BACKLIGHT_MAX; ambient_init(&kbd_bck_status.r_sens, &kbd_bck_status.l_sens); } void kbd_backlight_ambient_check(void) { int amb_r, amb_l; ambient_get(&amb_r, &amb_l); if ((amb_r < 0) || (amb_l < 0)) return; if ((amb_r < kbd_cfg.on_thresh) && (amb_l < kbd_cfg.on_thresh)) { logdebug("Ambient light lower threshold reached\n"); /* backlight turned on automatically, then disabled by user */ if (kbd_bck_status.auto_on && kbd_bck_status.off) return; /* backlight already on */ if (kbd_backlight_get() > KBD_BACKLIGHT_OFF) return; /* turn on backlight */ kbd_bck_status.auto_on = 1; kbd_bck_status.off = 0; kbd_backlight_set(kbd_cfg.auto_lvl); } else if (kbd_bck_status.auto_on) { if ((amb_r > kbd_cfg.off_thresh) || (amb_l > kbd_cfg.off_thresh)) { logdebug("Ambient light upper threshold reached\n"); kbd_bck_status.auto_on = 0; kbd_bck_status.off = 0; kbd_backlight_set(KBD_BACKLIGHT_OFF); } } mbpdbus_send_ambient_light(amb_l, kbd_bck_status.l_sens, amb_r, kbd_bck_status.r_sens); kbd_bck_status.r_sens = amb_r; kbd_bck_status.l_sens = amb_l; } void kbd_backlight_fix_config(void) { if (kbd_cfg.auto_lvl > KBD_BACKLIGHT_MAX) kbd_cfg.auto_lvl = KBD_BACKLIGHT_MAX; if (kbd_cfg.step < 1) kbd_cfg.step = 1; if (kbd_cfg.step > (KBD_BACKLIGHT_MAX / 2)) kbd_cfg.step = KBD_BACKLIGHT_MAX / 2; } pommed-1.1/pommed/mactel/gma950_backlight.c0000664000175000017500000001525110543727306020113 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * MacBook Backlight Control (Intel GMA950) * * $Id: gma950_backlight.c 200 2006-12-25 10:58:14Z julien $ * * Copyright (C) 2006 Ryan Lortie * Copyright (C) 2006 Julien BLACHE * + Adapted for pommed * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * * This program was written after I reverse engineered the * AppleIntelIntegratedFramebuffer.kext kernel extension in Mac OS X and * played with the register at the memory location I found therein. * * From my experiments, the register appears to have two halves. * * yyyyyyyyyyyyyyy0xxxxxxxxxxxxxxx0 * * The top (y) bits appear to be the maximum brightness level and the * bottom (x) bits are the current brightness level. 0s are always 0. * The brightness level is, therefore, x/y. * * As my Macbook boots, y is set to 0x94 and x is set to 0x1f. Going below * 0x1f produces odd results. For example, if you come from above, the * backlight will completely turn off at 0x12 (18). Coming from below, * however, you need to get to 0x15 (21) before the backlight comes back on. * * Since there is no clear cut boundry, I assume that this value specifies * a raw voltage. Also, it appears that the bootup value of 0x1f corresponds * to the lowest level that Mac OS X will set the backlight I choose this * value as a minimum. * * For the maximum I do not let the value exceed the value in the upper 15 * bits. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "../pommed.h" #include "../conffile.h" #include "../lcd_backlight.h" #include "../dbus.h" static unsigned int GMA950_BACKLIGHT_MAX; static int fd = -1; static char *memory = NULL; static long address = 0; static long length = 0; #define REGISTER_OFFSET 0x00061254 static inline unsigned int readl(const volatile void *addr) { return *(volatile unsigned int*) addr; } static inline void writel(unsigned int b, volatile void *addr) { *(volatile unsigned int*) addr = b; } #define INREG(addr) readl(memory+addr) #define OUTREG(addr,val) writel(val, memory+addr) static unsigned int gma950_backlight_get(void) { return (INREG(REGISTER_OFFSET) >> 1) & 0x7fff; } static unsigned int gma950_backlight_get_max(void) { return (INREG(REGISTER_OFFSET) >> 17); } static void gma950_backlight_set(unsigned int value) { OUTREG(REGISTER_OFFSET, (GMA950_BACKLIGHT_MAX << 17) | (value << 1)); } static int gma950_backlight_map(void) { if ((address == 0) || (length == 0)) { logdebug("No probing done !\n"); return -1; } fd = open("/dev/mem", O_RDWR); if (fd < 0) { logmsg(LOG_WARNING, "Cannot open /dev/mem: %s", strerror(errno)); return -1; } memory = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, address); if (memory == MAP_FAILED) { logmsg(LOG_ERR, "mmap failed: %s", strerror(errno)); return -1; } return 0; } static void gma950_backlight_unmap(void) { munmap(memory, length); memory = NULL; close(fd); fd = -1; } void gma950_backlight_step(int dir) { int ret; unsigned int val; unsigned int newval = 0; ret = gma950_backlight_map(); if (ret < 0) return; val = gma950_backlight_get(); if (dir == STEP_UP) { newval = val + lcd_gma950_cfg.step; if (newval < GMA950_BACKLIGHT_MIN) newval = GMA950_BACKLIGHT_MIN; if (newval > GMA950_BACKLIGHT_MAX) newval = GMA950_BACKLIGHT_MAX; logdebug("LCD stepping +%d -> %d\n", lcd_gma950_cfg.step, newval); } else if (dir == STEP_DOWN) { /* val is unsigned */ if (val > lcd_gma950_cfg.step) newval = val - lcd_gma950_cfg.step; if (newval < GMA950_BACKLIGHT_MIN) newval = 0x00; logdebug("LCD stepping -%d -> %d\n", lcd_gma950_cfg.step, newval); } else return; gma950_backlight_set(newval); gma950_backlight_unmap(); mbpdbus_send_lcd_backlight(newval, val); lcd_bck_info.level = newval; } /* * We are hardware-dependent for GMA950_BACKLIGHT_MAX, * so here _fix_config() is static and called at probe time. */ static void gma950_backlight_fix_config(void) { if (lcd_gma950_cfg.init < 0) lcd_gma950_cfg.init = -1; if (lcd_gma950_cfg.init > GMA950_BACKLIGHT_MAX) lcd_gma950_cfg.init = GMA950_BACKLIGHT_MAX; if ((lcd_gma950_cfg.init < GMA950_BACKLIGHT_MIN) && (lcd_gma950_cfg.init > 0)) lcd_gma950_cfg.init = 0x00; if (lcd_gma950_cfg.step < 1) lcd_gma950_cfg.step = 1; if (lcd_gma950_cfg.step > 0x20) lcd_gma950_cfg.step = 0x20; } #define PCI_ID_VENDOR_INTEL 0x8086 #define PCI_ID_PRODUCT_GMA950 0x27A2 /* Look for an Intel GMA950 */ int gma950_backlight_probe(void) { struct pci_access *pacc; struct pci_dev *dev; int ret; pacc = pci_alloc(); if (pacc == NULL) { logmsg(LOG_ERR, "Could not allocate PCI structs"); return -1; } pci_init(pacc); pci_scan_bus(pacc); /* Iterate over all devices */ for(dev = pacc->devices; dev; dev = dev->next) { pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES); /* GMA950 */ if ((dev->vendor_id == PCI_ID_VENDOR_INTEL) && (dev->device_id == PCI_ID_PRODUCT_GMA950)) { address = dev->base_addr[0]; length = dev->size[0]; } } pci_cleanup(pacc); if (!address) { logdebug("Failed to detect Intel GMA950, aborting...\n"); return -1; } /* Get the maximum backlight value */ ret = gma950_backlight_map(); if (ret < 0) { logmsg(LOG_ERR, "Could not determine max backlight value"); return -1; } GMA950_BACKLIGHT_MAX = gma950_backlight_get_max(); /* Now, check the config and fix it if needed */ gma950_backlight_fix_config(); /* Set the initial backlight level */ if (lcd_gma950_cfg.init > -1) gma950_backlight_set(lcd_gma950_cfg.init); lcd_bck_info.max = GMA950_BACKLIGHT_MAX; lcd_bck_info.level = gma950_backlight_get(); gma950_backlight_unmap(); return 0; } pommed-1.1/pommed/conffile.c0000664000175000017500000002324010550754134015413 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: conffile.c 244 2007-01-09 18:01:00Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "pommed.h" #include "conffile.h" #include "lcd_backlight.h" #include "kbd_backlight.h" #include "cd_eject.h" #include "audio.h" struct _general_cfg general_cfg; #ifdef __powerpc__ struct _lcd_r9600_cfg lcd_r9600_cfg; struct _lcd_r128_cfg lcd_r128_cfg; #else struct _lcd_x1600_cfg lcd_x1600_cfg; struct _lcd_gma950_cfg lcd_gma950_cfg; #endif struct _audio_cfg audio_cfg; struct _kbd_cfg kbd_cfg; struct _eject_cfg eject_cfg; #ifndef __powerpc__ struct _appleir_cfg appleir_cfg; #endif /* Config file structure */ static cfg_opt_t general_opts[] = { CFG_INT("fnmode", 1, CFGF_NONE), CFG_END() }; #ifdef __powerpc__ static cfg_opt_t lcd_r9600_opts[] = { CFG_INT("init", -1, CFGF_NONE), CFG_INT("step", 10, CFGF_NONE), CFG_END() }; static cfg_opt_t lcd_r128_opts[] = { CFG_INT("init", -1, CFGF_NONE), CFG_END() }; #else static cfg_opt_t lcd_x1600_opts[] = { CFG_INT("init", -1, CFGF_NONE), CFG_INT("step", 10, CFGF_NONE), CFG_END() }; static cfg_opt_t lcd_gma950_opts[] = { CFG_INT("init", -1, CFGF_NONE), CFG_INT("step", 0x0f, CFGF_NONE), CFG_END() }; #endif /* __powerpc__ */ static cfg_opt_t audio_opts[] = { CFG_STR("card", "default", CFGF_NONE), CFG_INT("init", -1, CFGF_NONE), CFG_INT("step", 10, CFGF_NONE), CFG_STR("volume", "PCM", CFGF_NONE), CFG_STR("speakers", "Front", CFGF_NONE), CFG_STR("headphones", "Headphone", CFGF_NONE), CFG_END() }; static cfg_opt_t kbd_opts[] = { CFG_INT("default", 100, CFGF_NONE), CFG_INT("step", 10, CFGF_NONE), CFG_INT("on_threshold", 20, CFGF_NONE), CFG_INT("off_threshold", 40, CFGF_NONE), CFG_BOOL("auto", 1, CFGF_NONE), CFG_END() }; static cfg_opt_t eject_opts[] = { CFG_BOOL("enabled", 1, CFGF_NONE), CFG_STR("device", "/dev/dvd", CFGF_NONE), CFG_END() }; #ifndef __powerpc__ static cfg_opt_t appleir_opts[] = { CFG_BOOL("enabled", 0, CFGF_NONE), CFG_END() }; #endif /* !__powerpc__ */ static cfg_opt_t opts[] = { CFG_SEC("general", general_opts, CFGF_NONE), #ifdef __powerpc__ CFG_SEC("lcd_r9600", lcd_r9600_opts, CFGF_NONE), CFG_SEC("lcd_r128", lcd_r128_opts, CFGF_NONE), #else CFG_SEC("lcd_x1600", lcd_x1600_opts, CFGF_NONE), CFG_SEC("lcd_gma950", lcd_gma950_opts, CFGF_NONE), #endif CFG_SEC("audio", audio_opts, CFGF_NONE), CFG_SEC("kbd", kbd_opts, CFGF_NONE), CFG_SEC("eject", eject_opts, CFGF_NONE), #ifndef __powerpc__ CFG_SEC("appleir", appleir_opts, CFGF_NONE), #endif CFG_END() }; static int config_validate_positive_integer(cfg_t *cfg, cfg_opt_t *opt) { int value = cfg_opt_getnint(opt, cfg_opt_size(opt) - 1); if (value < 0) { cfg_error(cfg, "Error: Value for '%s/%s' must be positive", cfg->name, opt->name); return -1; } return 0; } static int config_validate_string(cfg_t *cfg, cfg_opt_t *opt) { char *value = cfg_opt_getnstr(opt, cfg_opt_size(opt) - 1); if (strlen(value) == 0) { cfg_error(cfg, "Error: Value for '%s/%s' must be a non-zero string", cfg->name, opt->name); return -1; } return 0; } static void config_print(void) { printf("pommed configuration:\n"); printf(" + General settings:\n"); printf(" fnmode: %d\n", general_cfg.fnmode); #ifdef __powerpc__ printf(" + ATI Radeon 9600 backlight control:\n"); printf(" initial level: %d\n", lcd_r9600_cfg.init); printf(" step: %d\n", lcd_r9600_cfg.step); printf(" + ATI Rage128 backlight control:\n"); printf(" initial level: %d\n", lcd_r128_cfg.init); #else printf(" + ATI X1600 backlight control:\n"); printf(" initial level: %d\n", lcd_x1600_cfg.init); printf(" step: %d\n", lcd_x1600_cfg.step); printf(" + Intel GMA950 backlight control:\n"); printf(" initial level: 0x%x\n", lcd_gma950_cfg.init); printf(" step: 0x%x\n", lcd_gma950_cfg.step); #endif /* __powerpc__ */ printf(" + Audio volume control:\n"); printf(" card: %s\n", audio_cfg.card); printf(" initial volume: %d%s\n", audio_cfg.init, (audio_cfg.init > -1) ? "%" : ""); printf(" step: %d%%\n", audio_cfg.step); printf(" volume element: %s\n", audio_cfg.vol); printf(" speaker element: %s\n", audio_cfg.spkr); printf(" headphones element: %s\n", audio_cfg.head); printf(" + Keyboard backlight control:\n"); printf(" default level: %d\n", kbd_cfg.auto_lvl); printf(" step: %d\n", kbd_cfg.step); printf(" auto on threshold: %d\n", kbd_cfg.on_thresh); printf(" auto off threshold: %d\n", kbd_cfg.off_thresh); printf(" auto enable: %s\n", (kbd_cfg.auto_on) ? "yes" : "no"); printf(" + CD eject:\n"); printf(" enabled: %s\n", (eject_cfg.enabled) ? "yes" : "no"); printf(" device: %s\n", eject_cfg.device); #ifndef __powerpc__ printf(" + Apple Remote IR Receiver:\n"); printf(" enabled: %s\n", (appleir_cfg.enabled) ? "yes" : "no"); #endif /* !__powerpc__ */ } int config_load(void) { cfg_t *cfg; cfg_t *sec; int ret; cfg = cfg_init(opts, CFGF_NONE); if (cfg == NULL) { logmsg(LOG_ERR, "Failed to initialize configuration parser"); return -1; } /* Set up config values validation */ /* general */ cfg_set_validate_func(cfg, "general|fnmode", config_validate_positive_integer); #ifdef __powerpc__ /* lcd_r9600 */ cfg_set_validate_func(cfg, "lcd_r9600|step", config_validate_positive_integer); #else /* lcd_x1600 */ cfg_set_validate_func(cfg, "lcd_x1600|step", config_validate_positive_integer); /* lcd_gma950 */ cfg_set_validate_func(cfg, "lcd_gma950|step", config_validate_positive_integer); #endif /* __powerpc__ */ /* audio */ cfg_set_validate_func(cfg, "audio|card", config_validate_string); cfg_set_validate_func(cfg, "audio|step", config_validate_positive_integer); cfg_set_validate_func(cfg, "audio|volume", config_validate_string); cfg_set_validate_func(cfg, "audio|speakers", config_validate_string); cfg_set_validate_func(cfg, "audio|headphones", config_validate_string); /* kbd */ cfg_set_validate_func(cfg, "kbd|default", config_validate_positive_integer); cfg_set_validate_func(cfg, "kbd|step", config_validate_positive_integer); cfg_set_validate_func(cfg, "kbd|on_threshold", config_validate_positive_integer); cfg_set_validate_func(cfg, "kbd|off_threshold", config_validate_positive_integer); /* CD eject */ cfg_set_validate_func(cfg, "eject|device", config_validate_string); /* * Do the actual parsing. * If the file does not exist or cannot be opened, * we'll be using the default values defined in the cfg_opt_t arrays. */ ret = cfg_parse(cfg, CONFFILE); if (ret != CFG_SUCCESS) { if (ret == CFG_FILE_ERROR) { logmsg(LOG_INFO, "Configuration file not found, using defaults"); } else { cfg_free(cfg); logmsg(LOG_ERR, "Failed to parse configuration file"); return -1; } } /* Fill up the structs */ sec = cfg_getsec(cfg, "general"); general_cfg.fnmode = cfg_getint(sec, "fnmode"); #ifdef __powerpc__ sec = cfg_getsec(cfg, "lcd_r9600"); lcd_r9600_cfg.init = cfg_getint(sec, "init"); lcd_r9600_cfg.step = cfg_getint(sec, "step"); r9600_backlight_fix_config(); sec = cfg_getsec(cfg, "lcd_r128"); lcd_r128_cfg.init = cfg_getint(sec, "init"); r128_backlight_fix_config(); #else sec = cfg_getsec(cfg, "lcd_x1600"); lcd_x1600_cfg.init = cfg_getint(sec, "init"); lcd_x1600_cfg.step = cfg_getint(sec, "step"); x1600_backlight_fix_config(); sec = cfg_getsec(cfg, "lcd_gma950"); lcd_gma950_cfg.init = cfg_getint(sec, "init"); lcd_gma950_cfg.step = cfg_getint(sec, "step"); /* No _fix_config() call here, as we're hardware-dependent * for the max backlight value */ #endif /* __powerpc__ */ sec = cfg_getsec(cfg, "audio"); audio_cfg.card = strdup(cfg_getstr(sec, "card")); audio_cfg.init = cfg_getint(sec, "init"); audio_cfg.step = cfg_getint(sec, "step"); audio_cfg.vol = strdup(cfg_getstr(sec, "volume")); audio_cfg.spkr = strdup(cfg_getstr(sec, "speakers")); audio_cfg.head = strdup(cfg_getstr(sec, "headphones")); audio_fix_config(); sec = cfg_getsec(cfg, "kbd"); kbd_cfg.auto_lvl = cfg_getint(sec, "default"); kbd_cfg.step = cfg_getint(sec, "step"); kbd_cfg.on_thresh = cfg_getint(sec, "on_threshold"); kbd_cfg.off_thresh = cfg_getint(sec, "off_threshold"); kbd_cfg.auto_on = cfg_getbool(sec, "auto"); kbd_backlight_fix_config(); sec = cfg_getsec(cfg, "eject"); eject_cfg.enabled = cfg_getbool(sec, "enabled"); eject_cfg.device = strdup(cfg_getstr(sec, "device")); cd_eject_fix_config(); #ifndef __powerpc__ sec = cfg_getsec(cfg, "appleir"); appleir_cfg.enabled = cfg_getbool(sec, "enabled"); #endif cfg_free(cfg); if (console) config_print(); return 0; } void config_cleanup(void) { free(audio_cfg.card); free(audio_cfg.vol); free(audio_cfg.spkr); free(audio_cfg.head); free(eject_cfg.device); } pommed-1.1/pommed/pommed.h0000664000175000017500000000217510550754312015116 0ustar julienjulien/* * $Id: pommed.h 246 2007-01-09 18:02:50Z julien $ */ #ifndef __POMMED_H__ #define __POMMED_H__ #define M_VERSION "1.1" extern int debug; extern int console; void logmsg(int level, char *fmt, ...); void logdebug(char *fmt, ...); void kbd_set_fnmode(void); typedef enum { MACHINE_ERROR = -1, MACHINE_UNKNOWN, MACHINE_MAC_UNKNOWN, #ifndef __powerpc__ MACHINE_MACBOOKPRO_1, MACHINE_MACBOOKPRO_2, MACHINE_MACBOOK_1, MACHINE_MACBOOK_2, #else MACHINE_POWERBOOK_32, MACHINE_POWERBOOK_55, MACHINE_POWERBOOK_56, MACHINE_POWERBOOK_57, #endif /* !__powerpc__ */ } machine_type; struct machine_ops { machine_type type; int (*lcd_backlight_probe) (void); void (*lcd_backlight_step) (int dir); int (*evdev_identify) (unsigned short *id); }; extern struct machine_ops *mops; #define PIDFILE "/var/run/pommed.pid" #define CONFFILE "/etc/pommed.conf" #define KBD_FNMODE_FILE "/sys/module/usbhid/parameters/pb_fnmode" #define STEP_UP 1 #define STEP_DOWN -1 #define LOOP_TIMEOUT 200 #endif /* !__POMMED_H__ */ pommed-1.1/pommed/conffile.h0000664000175000017500000000233310550754134015420 0ustar julienjulien/* * $Id: conffile.h 244 2007-01-09 18:01:00Z julien $ */ #ifndef __CONFFILE_H__ #define __CONFFILE_H__ struct _general_cfg { int fnmode; }; #ifdef __powerpc__ struct _lcd_r9600_cfg { int init; int step; }; struct _lcd_r128_cfg { int init; }; #else struct _lcd_x1600_cfg { int init; int step; }; struct _lcd_gma950_cfg { unsigned int init; unsigned int step; }; #endif /* __powerpc__ */ struct _audio_cfg { char *card; int init; int step; char *vol; char *spkr; char *head; }; struct _kbd_cfg { int auto_lvl; int step; int on_thresh; int off_thresh; int auto_on; }; struct _eject_cfg { int enabled; char *device; }; #ifndef __powerpc__ struct _appleir_cfg { int enabled; }; #endif extern struct _general_cfg general_cfg; #ifdef __powerpc__ extern struct _lcd_r9600_cfg lcd_r9600_cfg; extern struct _lcd_r128_cfg lcd_r128_cfg; #else extern struct _lcd_x1600_cfg lcd_x1600_cfg; extern struct _lcd_gma950_cfg lcd_gma950_cfg; #endif extern struct _audio_cfg audio_cfg; extern struct _kbd_cfg kbd_cfg; extern struct _eject_cfg eject_cfg; #ifndef __powerpc__ extern struct _appleir_cfg appleir_cfg; #endif int config_load(void); void config_cleanup(void); #endif /* !__CONFFILE_H__ */ pommed-1.1/pommed/Makefile0000664000175000017500000000533010550754134015122 0ustar julienjulienARCH ?= $(shell uname -m) CC = gcc DBUS_CFLAGS = $(shell pkg-config dbus-1 --cflags) -DDBUS_API_SUBJECT_TO_CHANGE DBUS_LIBS = $(shell pkg-config dbus-1 --libs) ALSA_CFLAGS = $(shell pkg-config alsa --cflags) ALSA_LIBS = $(shell pkg-config alsa --libs) CONFUSE_CFLAGS = $(shell pkg-config libconfuse --cflags) CONFUSE_LIBS = $(shell pkg-config libconfuse --libs) CFLAGS = -g -O2 -Wall $(CONFUSE_CFLAGS) $(DBUS_CFLAGS) $(ALSA_CFLAGS) ifeq ($(ARCH), ppc) LDFLAGS = -lz $(CONFUSE_LIBS) $(DBUS_LIBS) $(ALSA_LIBS) SOURCES = pommed.c cd_eject.c evdev.c conffile.c audio.c dbus.c \ pmac/r9600_backlight.c pmac/r128_backlight.c \ pmac/kbd_backlight.c pmac/ambient.c OF_SOURCES = pmac/oflib/of_externals.c pmac/oflib/of_internals.c \ pmac/oflib/of_standard.c OF_OBJS = $(OF_SOURCES:%.c=%.o) LIBS = /usr/lib/libpci.a pmac/oflib/oflib.a else LDFLAGS = -lz -lsmbios $(CONFUSE_LIBS) $(DBUS_LIBS) $(ALSA_LIBS) SOURCES = pommed.c cd_eject.c evdev.c conffile.c audio.c dbus.c \ mactel/x1600_backlight.c mactel/gma950_backlight.c \ mactel/kbd_backlight.c mactel/ambient.c LIBS = /usr/lib/libpci.a endif OBJS = $(SOURCES:%.c=%.o) pommed: $(OBJS) $(LIBS) pommed.o: pommed.c pommed.h kbd_backlight.h lcd_backlight.h cd_eject.h evdev.h conffile.h audio.h dbus.h cd_eject.o: cd_eject.c cd_eject.h pommed.h conffile.h dbus.h evdev.o: evdev.c evdev.h pommed.h kbd_backlight.h lcd_backlight.h cd_eject.h conffile.h audio.h conffile.o: conffile.c conffile.h pommed.h lcd_backlight.h kbd_backlight.h cd_eject.h audio.h audio.o: audio.c audio.h pommed.h conffile.h dbus.h dbus.o: dbus.c dbus.h pommed.h lcd_backlight.h kbd_backlight.h ambient.h audio.h # PowerMac-specific files pmac/kbd_backlight.o: pmac/kbd_backlight.c kbd_backlight.h pommed.h ambient.h conffile.h dbus.h pmac/r9600_backlight.o: pmac/r9600_backlight.c pommed.h lcd_backlight.h conffile.h dbus.h pmac/r128_backlight.o: pmac/r128_backlight.c pommed.h lcd_backlight.h conffile.h dbus.h pmac/ambient.o: pmac/ambient.c ambient.h pommed.h dbus.h # OFlib pmac/oflib/oflib.a: $(OF_OBJS) ar cru $@ $^ pmac/oflib/of_externals.o: pmac/oflib/of_externals.c pmac/oflib/of_api.h pmac/oflib/of_internals.o: pmac/oflib/of_internals.c pmac/oflib/of_api.h pmac/oflib/of_standard.o: pmac/oflib/of_standard.c pmac/oflib/of_api.h # Mactel-specific files mactel/x1600_backlight.o: mactel/x1600_backlight.c pommed.h lcd_backlight.h conffile.h dbus.h mactel/gma950_backlight.o: mactel/gma950_backlight.c pommed.h lcd_backlight.h conffile.h dbus.h mactel/kbd_backlight.o: mactel/kbd_backlight.c kbd_backlight.h pommed.h ambient.h conffile.h dbus.h mactel/ambient.o: mactel/ambient.c ambient.h pommed.h dbus.h clean: rm -f pommed $(OBJS) $(OF_OBJS) pmac/oflib/oflib.a rm -f *~ mactel/*~ pmac/*~ pmac/oflib/*~ pommed-1.1/pommed/dbus.c0000664000175000017500000003067410543472504014574 0ustar julienjulien/* * pommed - Apple laptops hotkeys handler daemon * * $Id: dbus.c 192 2006-12-24 12:40:36Z julien $ * * Copyright (C) 2006 Julien BLACHE * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "pommed.h" #include "dbus.h" #include "lcd_backlight.h" #include "kbd_backlight.h" #include "ambient.h" #include "audio.h" static DBusError err; static DBusConnection *conn; void mbpdbus_send_lcd_backlight(int cur, int prev) { DBusMessage *msg; int ret; if (conn == NULL) return; logdebug("DBus lcdBacklight: %d %d\n", cur, prev); msg = dbus_message_new_signal("/org/pommed/notify/lcdBacklight", "org.pommed.signal.lcdBacklight", "lcdBacklight"); if (msg == NULL) { logdebug("Failed to create DBus message\n"); return; } ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &cur, DBUS_TYPE_UINT32, &prev, DBUS_TYPE_UINT32, &lcd_bck_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send lcdBacklight signal\n"); dbus_message_unref(msg); return; } dbus_connection_flush(conn); dbus_message_unref(msg); } void mbpdbus_send_kbd_backlight(int cur, int prev) { DBusMessage *msg; int ret; if (conn == NULL) return; logdebug("DBus kbdBacklight: %d %d\n", cur, prev); msg = dbus_message_new_signal("/org/pommed/notify/kbdBacklight", "org.pommed.signal.kbdBacklight", "kbdBacklight"); if (msg == NULL) { logdebug("Failed to create DBus message\n"); return; } ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &cur, DBUS_TYPE_UINT32, &prev, DBUS_TYPE_UINT32, &kbd_bck_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send kbdBacklight signal\n"); dbus_message_unref(msg); return; } dbus_connection_flush(conn); dbus_message_unref(msg); } void mbpdbus_send_ambient_light(int l, int l_prev, int r, int r_prev) { DBusMessage *msg; int ret; if (conn == NULL) return; logdebug("DBus ambientLight: %d %d %d %d\n", l, l_prev, r, r_prev); msg = dbus_message_new_signal("/org/pommed/notify/ambientLight", "org.pommed.signal.ambientLight", "ambientLight"); if (msg == NULL) { logdebug("Failed to create DBus message\n"); return; } ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &l, DBUS_TYPE_UINT32, &l_prev, DBUS_TYPE_UINT32, &r, DBUS_TYPE_UINT32, &r_prev, DBUS_TYPE_UINT32, &ambient_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send kbdBacklight signal\n"); dbus_message_unref(msg); return; } dbus_connection_flush(conn); dbus_message_unref(msg); } void mbpdbus_send_audio_volume(int cur, int prev) { DBusMessage *msg; int ret; if (conn == NULL) return; logdebug("DBus audioVolume: %d %d\n", cur, prev); msg = dbus_message_new_signal("/org/pommed/notify/audioVolume", "org.pommed.signal.audioVolume", "audioVolume"); if (msg == NULL) { logdebug("Failed to create DBus message\n"); return; } ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &cur, DBUS_TYPE_UINT32, &prev, DBUS_TYPE_UINT32, &audio_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send audioVolume signal\n"); dbus_message_unref(msg); return; } dbus_connection_flush(conn); dbus_message_unref(msg); } void mbpdbus_send_audio_mute(int mute) { DBusMessage *msg; int ret; if (conn == NULL) return; logdebug("DBus audioMute: %d\n", mute); msg = dbus_message_new_signal("/org/pommed/notify/audioMute", "org.pommed.signal.audioMute", "audioMute"); if (msg == NULL) { logdebug("Failed to create DBus message\n"); return; } ret = dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &mute, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send audioMute signal\n"); dbus_message_unref(msg); return; } dbus_connection_flush(conn); dbus_message_unref(msg); } void mbpdbus_send_cd_eject(void) { DBusMessage *msg; int ret; if (conn == NULL) return; logdebug("DBus CD eject\n"); msg = dbus_message_new_signal("/org/pommed/notify/cdEject", "org.pommed.signal.cdEject", "cdEject"); if (msg == NULL) { logdebug("Failed to create DBus message\n"); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send cdEject signal\n"); dbus_message_unref(msg); return; } dbus_connection_flush(conn); dbus_message_unref(msg); } static void process_lcd_level_call(DBusMessage *req) { DBusMessage *msg; DBusMessageIter args; int ret; logdebug("Got lcdBacklight getLevel call\n"); if (dbus_message_iter_init(req, &args)) { logdebug("lcdBacklight getLevel call with arguments ?!\n"); return; } msg = dbus_message_new_method_return(req); ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &lcd_bck_info.level, DBUS_TYPE_UINT32, &lcd_bck_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send lcdBacklight getLevel reply\n"); dbus_message_unref(msg); return; } dbus_message_unref(msg); } static void process_kbd_level_call(DBusMessage *req) { DBusMessage *msg; DBusMessageIter args; int ret; logdebug("Got kbdBacklight getLevel call\n"); if (dbus_message_iter_init(req, &args)) { logdebug("kbdBacklight getLevel call with arguments ?!\n"); return; } msg = dbus_message_new_method_return(req); ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &kbd_bck_info.level, DBUS_TYPE_UINT32, &kbd_bck_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send kbdBacklight getLevel reply\n"); dbus_message_unref(msg); return; } dbus_message_unref(msg); } static void process_ambient_level_call(DBusMessage *req) { DBusMessage *msg; DBusMessageIter args; int ret; logdebug("Got ambient getLevel call\n"); if (dbus_message_iter_init(req, &args)) { logdebug("ambient getLevel call with arguments ?!\n"); return; } msg = dbus_message_new_method_return(req); ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &ambient_info.left, DBUS_TYPE_UINT32, &ambient_info.right, DBUS_TYPE_UINT32, &ambient_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send ambient getLevel reply\n"); dbus_message_unref(msg); return; } dbus_message_unref(msg); } static void process_audio_volume_call(DBusMessage *req) { DBusMessage *msg; DBusMessageIter args; int ret; logdebug("Got audio getVolume call\n"); if (dbus_message_iter_init(req, &args)) { logdebug("audio getVolume call with arguments ?!\n"); return; } msg = dbus_message_new_method_return(req); ret = dbus_message_append_args(msg, DBUS_TYPE_UINT32, &audio_info.level, DBUS_TYPE_UINT32, &audio_info.max, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send audio getVolume reply\n"); dbus_message_unref(msg); return; } dbus_message_unref(msg); } static void process_audio_mute_call(DBusMessage *req) { DBusMessage *msg; DBusMessageIter args; int ret; logdebug("Got audio getMute call\n"); if (dbus_message_iter_init(req, &args)) { logdebug("audio getMute call with arguments ?!\n"); return; } msg = dbus_message_new_method_return(req); ret = dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &audio_info.muted, DBUS_TYPE_INVALID); if (ret == FALSE) { logdebug("Failed to add arguments\n"); dbus_message_unref(msg); return; } ret = dbus_connection_send(conn, msg, NULL); if (ret == FALSE) { logdebug("Could not send audio getMute reply\n"); dbus_message_unref(msg); return; } dbus_message_unref(msg); } void mbpdbus_process_requests(void) { DBusMessage *msg; int nmsg; if (conn == NULL) { if (mbpdbus_init() < 0) return; } logdebug("Processing DBus requests\n"); nmsg = 0; while (1) { logdebug("Checking messages\n"); dbus_connection_read_write(conn, 0); msg = dbus_connection_pop_message(conn); if (msg == NULL) { break; } if (dbus_message_is_method_call(msg, "org.pommed.lcdBacklight", "getLevel")) process_lcd_level_call(msg); else if (dbus_message_is_method_call(msg, "org.pommed.kbdBacklight", "getLevel")) process_kbd_level_call(msg); else if (dbus_message_is_method_call(msg, "org.pommed.ambient", "getLevel")) process_ambient_level_call(msg); else if (dbus_message_is_method_call(msg, "org.pommed.audio", "getVolume")) process_audio_volume_call(msg); else if (dbus_message_is_method_call(msg, "org.pommed.audio", "getMute")) process_audio_mute_call(msg); else if (dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, "Disconnected")) { logmsg(LOG_INFO, "DBus disconnected"); mbpdbus_cleanup(); dbus_message_unref(msg); return; } dbus_message_unref(msg); nmsg++; } if (nmsg > 0) dbus_connection_flush(conn); logdebug("Done with DBus requests\n"); } int mbpdbus_init(void) { int ret; dbus_error_init(&err); conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) { logmsg(LOG_ERR, "DBus system bus connection failed: %s", err.message); dbus_error_free(&err); conn = NULL; return -1; } dbus_connection_set_exit_on_disconnect(conn, FALSE); ret = dbus_bus_request_name(conn, "org.pommed", 0, &err); if (dbus_error_is_set(&err)) { logmsg(LOG_ERR, "Failed to request DBus name: %s", err.message); mbpdbus_cleanup(); return -1; } if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { logmsg(LOG_ERR, "Not primary DBus name owner"); mbpdbus_cleanup(); return -1; } return 0; } void mbpdbus_cleanup(void) { if (conn == NULL) return; dbus_error_free(&err); /* This is a shared connection owned by libdbus * Do not close it, only unref */ dbus_connection_unref(conn); conn = NULL; } pommed-1.1/wmpomme/0000775000175000017500000000000010550765203013660 5ustar julienjulienpommed-1.1/wmpomme/wmpomme.10000664000175000017500000000115110543463205015420 0ustar julienjulien.TH WMPOMME 1 "2006-12-16" .SH NAME wmpomme \- WindowMaker dockapp for use with pommed .SH SYNOPSIS .B wmpomme .BI [\-r \ time ] .B [\-v] .SH DESCRIPTION .B wmpomme displays, as a WindowMaker dockapp, the state of the devices controlled by .B pommed .SH OPTIONS .TP .BI \-v Display the version .TP .BI \-r \ time Sets the update interval (in milliseconds), default: 100 .TP .BI \-display \ display This option specifies the X server to contact; see X(1). .SH AUTHOR .B wmpomme was written by Julien BLACHE , based on .B wmwave by Carsten Schuermann .SH SEE ALSO pommed(1) pommed-1.1/wmpomme/wmgeneral.c0000664000175000017500000003421410543455603016013 0ustar julienjulien/* * $Log: wmgeneral.c,v $ * Revision 1.1 1999/08/15 15:38:38 carsten * Added wmwave project to repository * * Revision 1.3 1999/07/19 21:31:46 dan * Added -c option * * Revision 1.2 1999/06/16 01:29:24 dan * Changed the logs to include changes made by me * Best viewed with vim5, using ts=4 wmgeneral was taken from wmppp. It has a lot of routines which most of the wm* programs use. ------------------------------------------------------------ Author: Martijn Pieterse (pieterse@xs4all.nl) --- CHANGES: --- 14/09/1998 (Dave Clark, clarkd@skyia.com) * Updated createXBMfromXPM routine * Now supports >256 colors 11/09/1998 (Martijn Pieterse, pieterse@xs4all.nl) * Removed a bug from parse_rcfile. You could not use "start" in a command if a label was also start. * Changed the needed geometry string. We don't use window size, and don't support negative positions. 03/09/1998 (Martijn Pieterse, pieterse@xs4all.nl) * Added parse_rcfile2 02/09/1998 (Martijn Pieterse, pieterse@xs4all.nl) * Added -geometry support (untested) 28/08/1998 (Martijn Pieterse, pieterse@xs4all.nl) * Added createXBMfromXPM routine * Saves a lot of work with changing xpm's. 02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl) * changed the read_rc_file to parse_rcfile, as suggested by Marcelo E. Magallon * debugged the parse_rc file. 30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl) * Ripped similar code from all the wm* programs, and put them in a single file. */ #include #include #include #include #include #include #include #include #include #include "wmgeneral.h" /*****************/ /* X11 Variables */ /*****************/ Window Root; int screen; int x_fd; int d_depth; XSizeHints mysizehints; XWMHints mywmhints; Pixel back_pix, fore_pix; char *Geometry = ""; Window iconwin, win; GC NormalGC; XpmIcon wmgen; Pixmap pixmask; /*****************/ /* Mouse Regions */ /*****************/ typedef struct { int enable; int top; int bottom; int left; int right; } MOUSE_REGION; MOUSE_REGION mouse_region[MAX_MOUSE_REGION]; /***********************/ /* Function Prototypes */ /***********************/ static void GetXPM(XpmIcon *, char **); static Pixel GetColor(char *); void RedrawWindow(void); void AddMouseRegion(int, int, int, int, int); int CheckMouseRegion(int, int); /*******************************************************************************\ |* parse_rcfile \*******************************************************************************/ void parse_rcfile(const char *filename, rckeys *keys) { char *p,*q; char temp[128]; char *tokens = " :\t\n"; FILE *fp; int i,key; fp = fopen(filename, "r"); if (fp) { while (fgets(temp, 128, fp)) { key = 0; q = strdup(temp); q = strtok(q, tokens); while (key >= 0 && keys[key].label) { if ((!strcmp(q, keys[key].label))) { p = strstr(temp, keys[key].label); p += strlen(keys[key].label); p += strspn(p, tokens); if ((i = strcspn(p, "#\n"))) p[i] = 0; free(*keys[key].var); *keys[key].var = strdup(p); key = -1; } else key++; } free(q); } fclose(fp); } } /*******************************************************************************\ |* parse_rcfile2 \*******************************************************************************/ void parse_rcfile2(const char *filename, rckeys2 *keys) { char *p; char temp[128]; char *tokens = " :\t\n"; FILE *fp; int i,key; char *family = NULL; fp = fopen(filename, "r"); if (fp) { while (fgets(temp, 128, fp)) { key = 0; while (key >= 0 && keys[key].label) { if ((p = strstr(temp, keys[key].label))) { p += strlen(keys[key].label); p += strspn(p, tokens); if ((i = strcspn(p, "#\n"))) p[i] = 0; free(*keys[key].var); *keys[key].var = strdup(p); key = -1; } else key++; } } fclose(fp); } free(family); } /*******************************************************************************\ |* GetXPM \*******************************************************************************/ static void GetXPM(XpmIcon *wmgen, char *pixmap_bytes[]) { XWindowAttributes attributes; int err; /* For the colormap */ XGetWindowAttributes(display, Root, &attributes); wmgen->attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); err = XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen->pixmap), &(wmgen->mask), &(wmgen->attributes)); if (err != XpmSuccess) { fprintf(stderr, "Not enough free colorcells.\n"); exit(1); } } /*******************************************************************************\ |* GetColor \*******************************************************************************/ static Pixel GetColor(char *name) { XColor color; XWindowAttributes attributes; XGetWindowAttributes(display, Root, &attributes); color.pixel = 0; if (!XParseColor(display, attributes.colormap, name, &color)) { fprintf(stderr, "wm.app: can't parse %s.\n", name); } else if (!XAllocColor(display, attributes.colormap, &color)) { fprintf(stderr, "wm.app: can't allocate %s.\n", name); } return color.pixel; } /*******************************************************************************\ |* flush_expose \*******************************************************************************/ static int flush_expose(Window w) { XEvent dummy; int i=0; while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) i++; return i; } /*******************************************************************************\ |* RedrawWindow \*******************************************************************************/ void RedrawWindow(void) { flush_expose(iconwin); XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0); flush_expose(win); XCopyArea(display, wmgen.pixmap, win, NormalGC, 0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0); } /*******************************************************************************\ |* RedrawWindowXY \*******************************************************************************/ void RedrawWindowXY(int x, int y) { flush_expose(iconwin); XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0); flush_expose(win); XCopyArea(display, wmgen.pixmap, win, NormalGC, x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0); } /*******************************************************************************\ |* AddMouseRegion \*******************************************************************************/ void AddMouseRegion(int index, int left, int top, int right, int bottom) { if (index < MAX_MOUSE_REGION) { mouse_region[index].enable = 1; mouse_region[index].top = top; mouse_region[index].left = left; mouse_region[index].bottom = bottom; mouse_region[index].right = right; } } /*******************************************************************************\ |* CheckMouseRegion \*******************************************************************************/ int CheckMouseRegion(int x, int y) { int i; int found; found = 0; for (i=0; i= mouse_region[i].left && y <= mouse_region[i].bottom && y >= mouse_region[i].top) found = 1; } if (!found) return -1; return (i-1); } /*******************************************************************************\ |* createXBMfromXPM \*******************************************************************************/ void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) { int i,j,k; int width, height, numcol, depth; int zero=0; unsigned char bwrite; int bcount; int curpixel; sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth); for (k=0; k!=depth; k++) { zero <<=8; zero |= xpm[1][k]; } for (i=numcol+1; i < numcol+sy+1; i++) { bcount = 0; bwrite = 0; for (j=0; j>= 1; curpixel=0; for (k=0; k!=depth; k++) { curpixel <<=8; curpixel |= xpm[i][j+k]; } if ( curpixel != zero ) { bwrite += 128; } bcount++; if (bcount == 8) { *xbm = bwrite; xbm++; bcount = 0; bwrite = 0; } } } } /*******************************************************************************\ |* copyXPMArea *| \*******************************************************************************/ void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) { XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); } /*******************************************************************************\ |* copyXBMArea *| \*******************************************************************************/ void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) { XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); } /*******************************************************************************\ |* setMaskXY *| \*******************************************************************************/ void setMaskXY(int x, int y) { XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask, ShapeSet); XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask, ShapeSet); } /*******************************************************************************\ |* openXwindow *| \*******************************************************************************/ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) { unsigned int borderwidth = 1; XClassHint classHint; char *display_name = NULL; char *wname = argv[0]; XTextProperty name; XGCValues gcv; unsigned long gcm; char *geometry = NULL; int dummy=0; int i, wx, wy; for (i=1; argv[i]; i++) { if (!strcmp(argv[i], "-display")) { display_name = argv[i+1]; i++; } if (!strcmp(argv[i], "-geometry")) { geometry = argv[i+1]; i++; } } if (!(display = XOpenDisplay(display_name))) { fprintf(stderr, "%s: can't open display %s\n", wname, XDisplayName(display_name)); exit(1); } screen = DefaultScreen(display); Root = RootWindow(display, screen); d_depth = DefaultDepth(display, screen); x_fd = XConnectionNumber(display); /* Convert XPM to XImage */ GetXPM(&wmgen, pixmap_bytes); /* Create a window to hold the stuff */ mysizehints.flags = USSize | USPosition; mysizehints.x = 0; mysizehints.y = 0; back_pix = GetColor("white"); fore_pix = GetColor("black"); XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy); mysizehints.width = 64; mysizehints.height = 64; win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y, mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y, mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); /* Activate hints */ XSetWMNormalHints(display, win, &mysizehints); classHint.res_name = wname; classHint.res_class = wname; XSetClassHint(display, win, &classHint); XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); if (XStringListToTextProperty(&wname, 1, &name) == 0) { fprintf(stderr, "%s: can't allocate window name\n", wname); exit(1); } XSetWMName(display, win, &name); /* Create GC for drawing */ gcm = GCForeground | GCBackground | GCGraphicsExposures; gcv.foreground = fore_pix; gcv.background = back_pix; gcv.graphics_exposures = 0; NormalGC = XCreateGC(display, Root, gcm, &gcv); /* ONLYSHAPE ON */ pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height); XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet); XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); /* ONLYSHAPE OFF */ mywmhints.initial_state = WithdrawnState; mywmhints.icon_window = iconwin; mywmhints.icon_x = mysizehints.x; mywmhints.icon_y = mysizehints.y; mywmhints.window_group = win; mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; XSetWMHints(display, win, &mywmhints); XSetCommand(display, win, argv, argc); XMapWindow(display, win); if (geometry) { if (sscanf(geometry, "+%d+%d", &wx, &wy) != 2) { fprintf(stderr, "Bad geometry string.\n"); exit(1); } XMoveWindow(display, win, wx, wy); } } pommed-1.1/wmpomme/wmpomme.c0000664000175000017500000003310610543472504015511 0ustar julienjulien/* * wmpomme -- WindowMaker dockapp for use with pommed * * $Id: wmpomme.c 192 2006-12-24 12:40:36Z julien $ * * Copyright (C) 2006 Julien BLACHE * * Based on wmwave by Carsten Schuermann * wmwave derived from: * Dan Piponi dan@tanelorn.demon.co.uk * http://www.tanelorn.demon.co.uk * who derived it from code originally contained * in wmsysmon by Dave Clark (clarkd@skynet.ca) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "wmgeneral.h" #include "wmpomme-master.xpm" #include "../dbus-client/dbus-client.h" struct { int lcd_lvl; int lcd_max; int kbd_lvl; int kbd_max; int snd_lvl; int snd_max; int snd_mute; int ambient_l; int ambient_r; int ambient_max; } mbp; #define DISPLAY_DBUS_NOK 0 #define DISPLAY_NO_DATA 1 #define DISPLAY_MACBOOK 2 #define DISPLAY_AMBIENT 3 int mbpdisplay = DISPLAY_DBUS_NOK; char wmmbp_mask_bits[64*64]; int wmmbp_mask_width = 64; int wmmbp_mask_height = 64; #define WMPOMME_VERSION "0.1" int update_rate = 100; char *ProgName; DBusError dbus_err; DBusConnection *conn; void wmmbp_get_values(void); int wmmbp_dbus_init(void) { unsigned int signals; signals = MBP_DBUS_SIG_LCD | MBP_DBUS_SIG_KBD | MBP_DBUS_SIG_VOL | MBP_DBUS_SIG_MUTE | MBP_DBUS_SIG_LIGHT; conn = mbp_dbus_init(&dbus_err, signals); if (conn == NULL) { mbpdisplay = DISPLAY_DBUS_NOK; return -1; } else wmmbp_get_values(); return 0; } void mbp_dbus_listen(int timeout) { DBusMessage *msg; int scratch; /* Disconnected, try to reconnect */ if (conn == NULL) { if (wmmbp_dbus_init() < 0) usleep(timeout * 1000); return; } while (1) { dbus_connection_read_write(conn, timeout); /* next iterations in this call, to drain the queue */ timeout = 0; msg = dbus_connection_pop_message(conn); if (msg == NULL) return; if (dbus_message_is_signal(msg, "org.pommed.signal.ambientLight", "ambientLight")) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.ambient_l, DBUS_TYPE_UINT32, &scratch, /* previous left */ DBUS_TYPE_UINT32, &mbp.ambient_r, DBUS_TYPE_UINT32, &scratch, /* previous right */ DBUS_TYPE_UINT32, &mbp.ambient_max, DBUS_TYPE_INVALID); } else if (dbus_message_is_signal(msg, "org.pommed.signal.lcdBacklight", "lcdBacklight")) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.lcd_lvl, DBUS_TYPE_UINT32, &scratch, /* previous */ DBUS_TYPE_UINT32, &mbp.lcd_max, DBUS_TYPE_INVALID); } else if (dbus_message_is_signal(msg, "org.pommed.signal.kbdBacklight", "kbdBacklight")) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.kbd_lvl, DBUS_TYPE_UINT32, &scratch, /* previous */ DBUS_TYPE_UINT32, &mbp.kbd_max, DBUS_TYPE_INVALID); } else if (dbus_message_is_signal(msg, "org.pommed.signal.audioVolume", "audioVolume")) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.snd_lvl, DBUS_TYPE_UINT32, &scratch, /* previous */ DBUS_TYPE_UINT32, &mbp.snd_max, DBUS_TYPE_INVALID); } else if (dbus_message_is_signal(msg, "org.pommed.signal.audioMute", "audioMute")) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_BOOLEAN, &mbp.snd_mute, DBUS_TYPE_INVALID); } else if (dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, "Disconnected")) { printf("DBus disconnected\n"); mbpdisplay = DISPLAY_DBUS_NOK; mbp_dbus_cleanup(); conn = NULL; dbus_message_unref(msg); break; } dbus_message_unref(msg); } } /* DBus method call callbacks */ void wmmbp_lcd_getlevel_cb(DBusPendingCall *pending, void *status) { DBusMessage *msg; msg = dbus_pending_call_steal_reply(pending); if (msg == NULL) { printf("Could not steal reply\n"); dbus_pending_call_unref(pending); return; } dbus_pending_call_unref(pending); if (!mbp_dbus_check_error(msg)) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.lcd_lvl, DBUS_TYPE_UINT32, &mbp.lcd_max, DBUS_TYPE_INVALID); } else *(int *)status = -1; dbus_message_unref(msg); } void wmmbp_kbd_getlevel_cb(DBusPendingCall *pending, void *status) { DBusMessage *msg; msg = dbus_pending_call_steal_reply(pending); if (msg == NULL) { printf("Could not steal reply\n"); dbus_pending_call_unref(pending); return; } dbus_pending_call_unref(pending); if (!mbp_dbus_check_error(msg)) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.kbd_lvl, DBUS_TYPE_UINT32, &mbp.kbd_max, DBUS_TYPE_INVALID); } else *(int *)status = -1; dbus_message_unref(msg); } void wmmbp_ambient_getlevel_cb(DBusPendingCall *pending, void *status) { DBusMessage *msg; msg = dbus_pending_call_steal_reply(pending); if (msg == NULL) { printf("Could not steal reply\n"); dbus_pending_call_unref(pending); return; } dbus_pending_call_unref(pending); if (!mbp_dbus_check_error(msg)) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.ambient_l, DBUS_TYPE_UINT32, &mbp.ambient_r, DBUS_TYPE_UINT32, &mbp.ambient_max, DBUS_TYPE_INVALID); } else *(int *)status = -1; dbus_message_unref(msg); } void wmmbp_audio_getvolume_cb(DBusPendingCall *pending, void *status) { DBusMessage *msg; msg = dbus_pending_call_steal_reply(pending); if (msg == NULL) { printf("Could not steal reply\n"); dbus_pending_call_unref(pending); return; } dbus_pending_call_unref(pending); if (!mbp_dbus_check_error(msg)) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_UINT32, &mbp.snd_lvl, DBUS_TYPE_UINT32, &mbp.snd_max, DBUS_TYPE_INVALID); } else *(int *)status = -1; dbus_message_unref(msg); } void wmmbp_audio_getmute_cb(DBusPendingCall *pending, void *status) { DBusMessage *msg; msg = dbus_pending_call_steal_reply(pending); if (msg == NULL) { printf("Could not steal reply\n"); dbus_pending_call_unref(pending); return; } dbus_pending_call_unref(pending); if (!mbp_dbus_check_error(msg)) { dbus_message_get_args(msg, &dbus_err, DBUS_TYPE_BOOLEAN, &mbp.snd_mute, DBUS_TYPE_INVALID); } else *(int *)status = -1; dbus_message_unref(msg); } void wmmbp_get_values(void) { int ret; int cbret; ret = mbp_call_lcd_getlevel(wmmbp_lcd_getlevel_cb, &cbret); if ((ret < 0) || (cbret < 0)) { printf("lcdBacklight getLevel call failed !\n"); goto mcall_error; } ret = mbp_call_kbd_getlevel(wmmbp_kbd_getlevel_cb, &cbret); if ((ret < 0) || (cbret < 0)) { printf("kbdBacklight getLevel call failed !\n"); goto mcall_error; } ret = mbp_call_ambient_getlevel(wmmbp_ambient_getlevel_cb, &cbret); if ((ret < 0) || (cbret < 0)) { printf("ambient getLevel call failed !\n"); goto mcall_error; } ret = mbp_call_audio_getvolume(wmmbp_audio_getvolume_cb, &cbret); if ((ret < 0) || (cbret < 0)) { printf("audio getVolume call failed !\n"); goto mcall_error; } ret = mbp_call_audio_getmute(wmmbp_audio_getmute_cb, &cbret); if ((ret < 0) || (cbret < 0)) { printf("audio getMute call failed !\n"); goto mcall_error; } mcall_error: if ((ret < 0) || (cbret < 0)) mbpdisplay = DISPLAY_NO_DATA; else if (mbpdisplay <= DISPLAY_NO_DATA) mbpdisplay = DISPLAY_MACBOOK; } void usage(void); void printversion(void); void BlitString(char *name, int x, int y); void BlitNum(int num, int x, int y); void wmmbp_routine(int argc, char **argv); void DrawBar(float percent, int dx, int dy) { int tx; tx = (int)(54.0 * (percent * 0.01)); copyXPMArea(67, 36, tx, 4, dx, dy); copyXPMArea(67, 43, 54-tx, 4, dx+tx, dy); } void DrawGreenBar(float percent, int dx, int dy) { int tx; tx = (int)(54.0 * (percent * 0.01)); copyXPMArea(67, 58, tx, 4, dx, dy); copyXPMArea(67, 43, 54-tx, 4, dx+tx, dy); } void DrawRedDot(void) { copyXPMArea(80, 65, 6, 6, 52, 5); } void DrawYellowDot(void) { copyXPMArea(86, 65, 6, 6, 52, 5); } void DrawGreenDot(void) { copyXPMArea(92, 65, 6, 6, 52, 5); } void DrawEmptyDot(void) { copyXPMArea(98, 65, 6, 6, 52, 5); } void DisplayMBPStatus(void) { switch (mbpdisplay) { case DISPLAY_MACBOOK: BlitString("MacBook", 4, 4); DrawGreenDot(); BlitString("LCD level", 4, 18); DrawBar(((float)mbp.lcd_lvl / (float)mbp.lcd_max) * 100.0, 4, 27); BlitString("KBD level", 4, 32); DrawGreenBar(((float)mbp.kbd_lvl / (float)mbp.kbd_max) * 100.0, 4, 41); if (mbp.snd_mute) BlitString("Audio OFF", 4, 46); else BlitString("Audio ", 4, 46); DrawGreenBar(((float)mbp.snd_lvl / (float)mbp.snd_max) * 100.0, 4, 55); break; case DISPLAY_AMBIENT: BlitString("Ambient", 4, 4); DrawYellowDot(); BlitString("Left ", 4, 18); DrawBar(((float)mbp.ambient_l / (float)mbp.ambient_max) * 100.0, 4, 27); BlitString("Right ", 4, 32); DrawBar(((float)mbp.ambient_r / (float)mbp.ambient_max) * 100.0, 4, 41); BlitString("KBD level", 4, 46); DrawGreenBar(((float)mbp.kbd_lvl / (float)mbp.kbd_max) * 100.0, 4, 55); break; case DISPLAY_DBUS_NOK: BlitString(" Error ", 4, 4); DrawRedDot(); BlitString("DBus ", 4, 18); DrawBar(0.0, 4, 27); BlitString("Connect ", 4, 32); DrawGreenBar(0.0, 4, 41); BlitString("Failed ", 4, 46); DrawGreenBar(0.0, 4, 55); break; case DISPLAY_NO_DATA: BlitString("No Data", 4, 4); DrawRedDot(); BlitString("Server ", 4, 18); DrawBar(0.0, 4, 27); BlitString("Not ", 4, 32); DrawGreenBar(0.0, 4, 41); BlitString("Running ?", 4, 46); DrawGreenBar(0.0, 4, 55); break; } } int running; void sig_int_term_handler(int signo) { running = 0; } int main(int argc, char **argv) { int i; signal(SIGINT, sig_int_term_handler); signal(SIGTERM, sig_int_term_handler); ProgName = argv[0]; if (strlen(ProgName) >= 5) ProgName += (strlen(ProgName) - 5); /* Parse Command Line */ for (i = 1; i < argc; i++) { char *arg = argv[i]; if (*arg == '-') { switch (arg[1]) { case 'd': if (strcmp(arg+1, "display")) { usage(); exit(1); } break; case 'g': if (strcmp(arg+1, "geometry")) { usage(); exit(1); } break; case 'v': printversion(); exit(0); break; case 'r': if (argc > (i+1)) { update_rate = (atoi(argv[i+1])); i++; } break; default: usage(); exit(0); break; } } } wmmbp_dbus_init(); wmmbp_routine(argc, argv); mbp_dbus_cleanup(); return 0; } /* * Main loop */ void wmmbp_routine(int argc, char **argv) { XEvent Event; createXBMfromXPM(wmmbp_mask_bits, wmmbp_master_xpm, wmmbp_mask_width, wmmbp_mask_height); openXwindow(argc, argv, wmmbp_master_xpm, wmmbp_mask_bits, wmmbp_mask_width, wmmbp_mask_height); RedrawWindow(); running = 1; while (running) { if (mbpdisplay == DISPLAY_NO_DATA) wmmbp_get_values(); /* * Update display */ DisplayMBPStatus(); RedrawWindow(); /* * X Events */ while (XPending(display)) { XNextEvent(display, &Event); switch (Event.type) { case Expose: RedrawWindow(); break; case DestroyNotify: XCloseDisplay(display); exit(0); break; case ButtonPress: if (mbpdisplay > DISPLAY_NO_DATA) { mbpdisplay++; if (mbpdisplay > DISPLAY_AMBIENT) mbpdisplay = DISPLAY_MACBOOK; DisplayMBPStatus(); RedrawWindow(); } break; } } mbp_dbus_listen(update_rate); } } /* * Blits a string at given co-ordinates */ void BlitString(char *name, int x, int y) { int i; int c; int k; k = x; for (i=0; name[i]; i++) { c = toupper(name[i]); /* A letter */ if (c >= 'A' && c <= 'Z') { c -= 'A'; copyXPMArea(c * 6, 74, 6, 8, k, y); k += 6; } /* A number or symbol */ else if (c>='0' && c<='9') { c -= '0'; copyXPMArea(c * 6, 64, 6, 8, k, y); k += 6; } else { copyXPMArea(5, 84, 6, 8, k, y); k += 6; } } } void BlitNum(int num, int x, int y) { char buf[1024]; sprintf(buf, "%03i", num); BlitString(buf, x, y); } void usage(void) { fprintf(stderr, "wmpomme v" WMPOMME_VERSION "\n"); fprintf(stderr, "Copyright (C) 2006 Julien BLACHE \n"); fprintf(stderr, "Based on wmwave by Carsten Schuermann \n\n"); fprintf(stderr, "Usage:\n"); fprintf(stderr, "\t-display \n"); fprintf(stderr, "\t-r\t\tupdate rate in milliseconds (default:100)\n"); } void printversion(void) { fprintf(stderr, "wmpomme v%s\n", WMPOMME_VERSION); fprintf(stderr, "Copyright (C) 2006 Julien BLACHE \n"); } pommed-1.1/wmpomme/wmgeneral.h0000664000175000017500000000212610543455603016015 0ustar julienjulien#ifndef WMGENERAL_H_INCLUDED #define WMGENERAL_H_INCLUDED /***********/ /* Defines */ /***********/ #define MAX_MOUSE_REGION (16) /************/ /* Typedefs */ /************/ typedef struct _rckeys rckeys; struct _rckeys { const char *label; char **var; }; typedef struct _rckeys2 rckeys2; struct _rckeys2 { const char *family; const char *label; char **var; }; typedef struct { Pixmap pixmap; Pixmap mask; XpmAttributes attributes; } XpmIcon; /*******************/ /* Global variable */ /*******************/ Display *display; /***********************/ /* Function Prototypes */ /***********************/ void AddMouseRegion(int index, int left, int top, int right, int bottom); int CheckMouseRegion(int x, int y); void openXwindow(int argc, char *argv[], char **, char *, int, int); void RedrawWindow(void); void RedrawWindowXY(int x, int y); void createXBMfromXPM(char *, char **, int, int); void copyXPMArea(int, int, int, int, int, int); void copyXBMArea(int, int, int, int, int, int); void setMaskXY(int, int); void parse_rcfile(const char *, rckeys *); #endif pommed-1.1/wmpomme/Makefile0000664000175000017500000000107410546031645015323 0ustar julienjulienCC = gcc DBUS_CFLAGS = $(shell pkg-config dbus-1 --cflags) -DDBUS_API_SUBJECT_TO_CHANGE DBUS_LIBS = $(shell pkg-config dbus-1 --libs) CFLAGS = -g -O2 -Wall $(DBUS_CFLAGS) LDFLAGS = -lXpm -lXext -lX11 $(DBUS_LIBS) SOURCES = wmgeneral.c wmpomme.c ../dbus-client/dbus-client.c OBJS = $(SOURCES:%.c=%.o) wmpomme: $(OBJS) wmpomme.o: wmpomme.c wmgeneral.h wmpomme-master.xpm ../dbus-client/dbus-client.h wmgeneral.o: wmgeneral.c wmgeneral.h ../dbus-client/dbus-client.o: ../dbus-client/dbus-client.c ../dbus-client/dbus-client.h clean: rm -f wmpomme $(OBJS) rm -f *~ pommed-1.1/wmpomme/wmpomme-master.xpm0000664000175000017500000014203610543463205017365 0ustar julienjulien/* XPM */ static char * wmmbp_master_xpm[] = { "240 100 109 2", ". c #0000FF", " c None", "+ c #202020", "@ c #000000", "# c #C7C5C8", "$ c #004941", "% c #20B2AE", "& c #107D79", "* c #188A86", "= c #B60317", "- c #B91216", "; c #BE2813", "> c #C33D11", ", c #C8530F", "' c #CD680C", ") c #D27D0A", "! c #D79308", "~ c #DCA805", "{ c #E1BE03", "] c #E7DC00", "^ c #D2DD00", "/ c #BDDE00", "( c #A8E000", "_ c #93E100", ": c #7EE200", "< c #69E400", "[ c #7EE100", "} c #7DE200", "| c #7CE200", "1 c #7BE200", "2 c #7AE200", "3 c #79E200", "4 c #78E200", "5 c #77E200", "6 c #76E200", "7 c #75E200", "8 c #74E200", "9 c #73E200", "0 c #72E300", "a c #71E300", "b c #70E300", "c c #6FE300", "d c #6EE300", "e c #6DE300", "f c #6CE300", "g c #6BE300", "h c #6AE300", "i c #69E300", "j c #68E400", "k c #00EA00", "l c #B91516", "m c #BE2A13", "n c #C33F11", "o c #C8550E", "p c #CD6A0C", "q c #D2800A", "r c #D79507", "s c #DCAA05", "t c #E1C003", "u c #BA1715", "v c #BF2C13", "w c #C44211", "x c #C9570E", "y c #CE6C0C", "z c #D38209", "A c #D89707", "B c #DDAC05", "C c #E2C202", "D c #BA1915", "E c #BF2E13", "F c #C44410", "G c #C9590E", "H c #CE6E0C", "I c #D38409", "J c #D89907", "K c #DDAF04", "L c #E2C402", "M c #B60617", "N c #BB1B15", "O c #C03013", "P c #C54610", "Q c #CA5B0E", "R c #CF710B", "S c #D48609", "T c #D99B07", "U c #DEB104", "V c #E3C602", "W c #B60817", "X c #BB1D15", "Y c #C03312", "Z c #C54810", "` c #CA5D0E", " . c #CF730B", ".. c #D48809", "+. c #D99D06", "@. c #DEB304", "#. c #E3C802", "$. c #B71612", "%. c #7CE100", "&. c #007D71", "*. c #B60418", "=. c #E8DC00", "-. c #00EB00", ";. c #283C38", ">. c #F7F3FF", ",. c #C7C3C7", "'. c #494949", "). c #7A7A7A", "!. c #BCBCBC", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . + + $ $ $ $ + + + $ $ $ $ + + + + + + + $ $ $ $ + + + $ $ $ $ + + + + + + + $ $ $ $ + + + $ $ $ $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . @ @ @ @ @ @ @ @ @ @ # . . . + . + $ + + + + $ + $ + + + + $ + + + + + $ + + + + $ + $ + + + + $ + + + + + $ + + + + $ + $ + + + + $ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . # # # # # # # # # # # . . . + . + + $ $ $ $ + + + $ $ $ $ + + + + + + + $ $ $ $ + + + $ $ $ $ + + + + + + + $ $ $ $ + + + $ $ $ $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . + . + $ + + + + $ + $ + + + + $ + + + + + $ + + + + $ + $ + + + + $ + + + + + $ + + + + $ + $ + + + + $ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . + . + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + + $ + + $ + + + + $ + $ + + + + $ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . + + $ $ $ $ + + + $ $ $ $ + + + + + + + $ $ $ $ + + + $ $ $ $ + + + + + + + $ $ $ $ + + + $ $ $ $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + % % % % + + + $ $ $ $ & + & % % % % * + & % % % % & + & $ $ $ $ & + & % % % % & + & % % % % * + & % % % % & + & % % % % * + & % % % % * + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + % + + + + % + $ + + + + % + $ + + + + % + $ + + + + % + % + + + + % + % + + + + $ + % + + + + $ + $ + + + + % + % + + + + % + % + + + + % + + % + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + % + + + + % + $ + + + + % + $ + + + + % + $ + + + + % + % + + + + % + % + + + + $ + % + + + + $ + $ + + + + % + % + + + + % + % + + + + % + + % + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + % + + + + % + $ + + + + % + $ + + + + % + $ + + + + % + % + + + + % + % + + + + $ + % + + + + $ + $ + + + + % + % + + + + % + % + + + + % + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + & $ $ $ $ & + + $ $ $ $ & + & % % % % & + & % % % % & + & % % % % & + & % % % % & + & % % % % & + + $ $ $ $ & + & % % % % & + & % % % % & + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + % + + + + % + $ + + + + % + % + + + + $ + $ + + + + % + $ + + + + % + $ + + + + % + % + + + + % + $ + + + + % + % + + + + % + $ + + + + % + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + % + + + + % + $ + + + + % + % + + + + $ + $ + + + + % + $ + + + + % + $ + + + + % + % + + + + % + $ + + + + % + % + + + + % + $ + + + + % + + % + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + % + + + + % + $ + + + + % + % + + + + $ + $ + + + + % + $ + + + + % + $ + + + + % + % + + + + % + $ + + + + % + % + + + + % + $ + + + + % + + % + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + % % % % + + + $ $ $ $ & + & % % % % & + & % % % % & + + $ $ $ $ & + & % % % % & + & % % % % & + + $ $ $ $ & + & % % % % & + & % % % % & + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . = - ; > , ' ) ! ~ { ] ] ] ] ] ] ^ / ( _ : < [ [ [ } | 1 1 2 3 3 4 5 5 6 7 8 8 9 0 0 a b c c d e e f g g h i j j j k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . = l m n o p q r s t ] ] ] ] ] ] ^ / ( _ : < [ [ [ } | 1 1 2 3 3 4 5 5 6 7 8 8 9 0 0 a b c c d e e f g g h i j j j k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . = u v w x y z A B C ] ] ] ] ] ] ^ / ( _ : < [ [ [ } | 1 1 2 3 3 4 5 5 6 7 8 8 9 0 0 a b c c d e e f g g h i j j j k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . = D E F G H I J K L ] ] ] ] ] ] ^ / ( _ : < [ [ [ } | 1 1 2 3 3 4 5 5 6 7 8 8 9 0 0 a b c c d e e f g g h i j j j k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . M N O P Q R S T U V ] ] ] ] ] ] ^ / ( _ : < [ [ [ } | 1 1 2 3 3 4 5 5 6 7 8 8 9 0 0 a b c c d e e f g g h i j j j k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . W X Y Z ` ...+.@.#.] ] ] ] ] ] ^ / ( _ : < [ [ [ } | 1 1 2 3 3 4 5 5 6 7 8 8 9 0 0 a b c c d e e f g g h i j j j k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . $.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # . . . + . . %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . + . . %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . %.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ + % % % + + + $ $ $ &.+ &.% % % &.+ &.% % % &.+ &.$ $ $ &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ + + + + + + + + + + + + + + + + + + . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + $ + + + % + $ + + + % + $ + + + % + % + + + % + % + + + $ + % + + + $ + $ + + + % + % + + + % + % + + + % + + + + + + + + + + + + % + + + + + + . @ @ *.*.@ @ @ @ =.=.@ @ @ @ -.-.@ @ @ @ ;.;.@ @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + $ + + + % + $ + + + % + $ + + + % + % + + + % + % + + + $ + % + + + $ + $ + + + % + % + + + % + % + + + % + + % + + + + % + + + + % + + + + + + . @ *.>.*.*.@ @ =.>.=.=.@ @ -.>.-.-.@ @ ;.;.;.;.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ &.$ $ $ &.+ + $ $ $ &.+ &.% % % &.+ + % % % &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ + $ $ $ &.+ $ % % % $ + &.% % % &.+ + &.+ + + + &.+ + + % + + + + + + + . @ *.*.*.*.@ @ =.=.=.=.@ @ -.-.-.-.@ @ ;.;.;.;.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + $ + + + % + % + + + $ + $ + + + % + $ + + + % + $ + + + % + % + + + % + $ + + + % + % + + + % + $ + + + % + + + + + + + + + + + % + + + + + + + . @ @ *.*.@ @ @ @ =.=.@ @ @ @ -.-.@ @ @ @ ;.;.@ @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + $ + + + % + % + + + $ + $ + + + % + $ + + + % + $ + + + % + % + + + % + $ + + + % + % + + + % + $ + + + % + + % + + + + % + + % + + + + + + + + . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ + % % % + + + $ $ $ % + &.% % % &.+ &.% % % &.+ + $ $ $ &.+ &.% % % &.+ &.% % % &.+ + $ $ $ &.+ &.% % % &.+ &.% % % &.+ + &.+ + + + &.+ + % + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ $ % % % $ + &.% % % + + &.% % % &.+ &.% % % + + &.% % % &.+ &.% % % &.+ &.% % % &.+ &.$ $ $ &.+ + $ $ $ &.+ + $ $ $ &.+ &.$ $ $ &.+ &.$ $ $ + + % $ $ $ % + &.% % % + + &.% % % &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ &.% % % &.+ &.$ $ $ &.+ &.$ $ $ &.+ &.$ $ $ &.+ &.$ $ $ &.+ &.$ $ $ &.+ &.% % % &.+ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + % + + + % + % + + + $ + % + + + % + % + + + $ + % + + + $ + % + + + $ + % + + + % + $ + + + % + $ + + + % + % + + + % + % + + + $ + % % + % % + % + + + % + % + + + % + % + + + % + % + + + % + % + + + % + % + + + $ + $ + % + $ + % + + + % + % + + + % + % + + + % + % + + + % + % + + + % + $ + + + % + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + % + + + % + % + + + $ + % + + + % + % + + + $ + % + + + $ + % + + + $ + % + + + % + $ + + + % + $ + + + % + % + + % $ + % + + + $ + % + % + % + % + + + % + % + + + % + % + + + % + % + + + % + % + + + % + % + + + $ + $ + % + $ + % + + + % + % + + + % + % + + + % + $ % + % $ + % + + + % + $ + + % $ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ &.% % % &.+ &.% % % + + &.$ $ $ + + &.$ $ $ &.+ &.% % % + + &.% % % + + &.$ % % &.+ &.% % % &.+ + $ $ $ &.+ + $ $ $ &.+ &.% % $ + + &.$ $ $ + + &.$ $ $ &.+ &.$ $ $ &.+ &.$ $ $ &.+ &.% % % &.+ &.% $ $ &.+ &.% % % + + &.% % % &.+ + $ &.$ + + &.$ $ $ &.+ &.$ $ $ &.+ &.$ $ $ &.+ + $ % $ + + &.% % % &.+ + $ % $ + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + % + + + % + % + + + $ + % + + + % + % + + + $ + % + + + $ + % + + + % + % + + + % + $ + + + % + $ + + + % + % + + % $ + % + + + $ + % + + + % + % + + + % + % + + + % + % + + + $ + % + % + % + % + + + % + $ + + + % + $ + % + $ + % + + + % + % + + + % + % + % + % + $ % + % $ + $ + + + % + $ % + + $ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ % + + + % + % + + + % + % + + + $ + % + + + % + % + + + $ + % + + + $ + % + + + % + % + + + % + $ + + + % + $ + + + % + % + + + % + % + + + $ + % + + + % + % + + + % + % + + + % + % + + + $ + % + + % % + % + + + % + $ + + + % + $ + % + $ + % + + + % + % + + + % + % % + % % + % + + + % + $ + + + % + % + + + $ + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ &.$ $ $ &.+ &.% % % + + &.% % % &.+ % % % % + + &.% % % &.+ % $ $ $ + + &.% % % &.+ &.$ $ $ &.+ + $ $ $ % + &.% % % &.+ &.$ $ $ &.+ &.% % % $ + &.$ $ $ &.+ % $ $ $ % + &.% % % &.+ &.$ $ $ + + &.% % % &.+ &.$ $ $ &.+ &.% % % &.+ + $ &.$ + + $ % % % % + + % % % + + % $ $ $ % + &.$ $ $ % &.&.% % % &.+ &.% % % &.+ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . @ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,.. . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + + + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + + + + + $ + + + $ + $ + + + $ + $ + + + $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + + $ + + $ + + + $ + $ + + + $ + $ + + + $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + + + + + $ + + + $ + $ + + + $ + $ + + + $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + $ + + + $ + + $ + + $ + + + $ + $ + + + $ + $ + + + $ + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + $ + + + $ $ $ + + + $ $ $ + + + $ $ $ + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "$ &.% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", "'.).!.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; pommed-1.1/gpomme/0000775000175000017500000000000010550765203013463 5ustar julienjulienpommed-1.1/gpomme/audio.c0000664000175000017500000001713410543462347014743 0ustar julienjulien/* * gpomme - GTK application for use with pommed * * $Id: audio.c 184 2006-12-24 11:30:47Z julien $ * * Copyright (C) 2006 Soeren SONNENBURG * Copyright (C) 2006 Julien BLACHE * * Portions of the code below were shamelessly * stolen from pbbuttonsd. Thanks ! ;-) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "gpomme.h" #include "audio.h" struct dspdata _dsp; /* Called from the main thread */ static struct sample * load_sample(char *theme, char *name) { AFfilehandle affd; /* filehandle for soundfile from libaudiofile */ AFframecount framecount; int dummy, channels, byteorder, framesize, precision, err = 0; struct sample *sample; char file[PATH_MAX]; int ret; ret = snprintf(file, PATH_MAX, "%s/%s/%s", THEME_BASE, theme, name); if (ret >= PATH_MAX) return NULL; sample = (struct sample *) malloc(sizeof(struct sample)); if (sample == NULL) return NULL; affd = afOpenFile(file, "r", 0); if (affd > 0) { afGetSampleFormat(affd, AF_DEFAULT_TRACK, &dummy, &precision); channels = afGetChannels(affd, AF_DEFAULT_TRACK); byteorder = afGetVirtualByteOrder(affd, AF_DEFAULT_TRACK); framesize = (int) afGetFrameSize(affd, AF_DEFAULT_TRACK, 0); framecount = afGetFrameCount(affd, AF_DEFAULT_TRACK); sample->speed = (int) afGetRate(affd, AF_DEFAULT_TRACK); if (channels <= 2) sample->channels = channels; else err = -1; if (precision == 8) sample->format = SND_PCM_FORMAT_S8; else if (precision == 16) { if (byteorder == AF_BYTEORDER_LITTLEENDIAN) sample->format = SND_PCM_FORMAT_S16_LE; else sample->format = SND_PCM_FORMAT_S16_BE; } else err = -1; if (err == 0) { sample->framesize = framesize; sample->framecount = framecount; sample->audiodatalen = framecount * framesize; sample->audiodata = (char *) malloc(sample->audiodatalen); if (sample->audiodata != NULL) { ret = afReadFrames(affd, AF_DEFAULT_TRACK, sample->audiodata, framecount); if (ret != framecount) { free(sample->audiodata); err = -1; } } else ret = -1; } afCloseFile(affd); } if (err == -1) { free(sample); return NULL; } sample->periods = sample->framesize; sample->buffersize = (sample->periods * 8192) >> 2; return sample; } /* Called from the audio thread */ static void play_sample(struct dspdata *dsp, int cmd) { snd_pcm_t *pcm_handle; snd_pcm_hw_params_t *hwparams; char *pcm_name = "default"; struct sample *s = dsp->sample[cmd]; snd_pcm_hw_params_alloca(&hwparams); if (snd_pcm_open(&pcm_handle, pcm_name, SND_PCM_STREAM_PLAYBACK, 0) < 0) { fprintf(stderr, "Error opening PCM device %s\n", pcm_name); return; } if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) { fprintf(stderr, "Can not configure this PCM device.\n"); return; } if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) { fprintf(stderr, "Error setting access.\n"); return; } if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, s->format) < 0) { fprintf(stderr, "Error setting format.\n"); return; } if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, &s->speed, 0) < 0) { fprintf(stderr, "Error setting rate.\n"); return; } /* Set number of channels */ if (snd_pcm_hw_params_set_channels_near(pcm_handle, hwparams, &s->channels) < 0) { fprintf(stderr, "Error setting channels.\n"); return; } /* Set number of periods. Periods used to be called fragments. */ if (snd_pcm_hw_params_set_periods_near(pcm_handle, hwparams, &s->periods, 0) < 0) { fprintf(stderr, "Error setting periods.\n"); return; } /* Set buffer size (in frames). The resulting latency is given by */ /* latency = periodsize * periods / (rate * bytes_per_frame) */ if (snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hwparams, &s->buffersize) < 0) { fprintf(stderr, "Error setting buffersize.\n"); return; } /* Apply HW parameter settings to */ /* PCM device and prepare device */ if (snd_pcm_hw_params(pcm_handle, hwparams) < 0) { fprintf(stderr, "Error setting HW params.\n"); return; } int pcmreturn; /* Write num_frames frames from buffer data to */ /* the PCM device pointed to by pcm_handle. */ /* Returns the number of frames actually written. */ while ((pcmreturn = snd_pcm_writei(pcm_handle, s->audiodata, s->framecount)) < 0) { snd_pcm_prepare(pcm_handle); fprintf(stderr, "<<<<<<<<<<<<<<< Buffer Underrun >>>>>>>>>>>>>>>\n"); } /* Stop PCM device and drop pending frames */ snd_pcm_drop(pcm_handle); /* Stop PCM device after pending frames have been played */ if (snd_pcm_close(pcm_handle) < 0) { fprintf(stderr, "snd_pcm_close error\n"); return; } } /* Called from the audio thread * Audio thread main loop */ void * audio_thread (void *arg) { struct dspdata *dsp = (struct dspdata *) arg; for (;;) { pthread_mutex_lock(&dsp->mutex); pthread_cond_wait(&dsp->cond, &dsp->mutex); pthread_mutex_unlock(&dsp->mutex); switch (dsp->command) { case AUDIO_CLICK: dsp->command = AUDIO_COMMAND_NONE; play_sample(dsp, AUDIO_CLICK); break; case AUDIO_COMMAND_QUIT: pthread_exit(NULL); break; case AUDIO_COMMAND_NONE: break; } } return NULL; } /* Called from the main thread * This function wakes the audio thread */ void audio_command(int command) { if (!_dsp.sample) return; pthread_mutex_lock(&(_dsp.mutex)); _dsp.command = command; pthread_cond_signal(&(_dsp.cond)); pthread_mutex_unlock(&(_dsp.mutex)); } /* Called from the main thread */ void audio_cleanup(void) { int i; if (!_dsp.sample) return; for (i = 0; i < AUDIO_N; i++) { if (_dsp.sample[i] == NULL) continue; if (_dsp.sample[i]->audiodata != NULL) free(_dsp.sample[i]->audiodata); free(_dsp.sample[i]); } pthread_mutex_destroy(&(_dsp.mutex)); pthread_cond_destroy(&(_dsp.cond)); } /* Called from the main thread * This function sets up the sound playing thread. * It starts the thread or if an error occur cleans * up all the audio stuff */ int audio_init_thread(void) { pthread_attr_t attr; int ret; _dsp.sample[AUDIO_CLICK] = load_sample("CrystalLarge", "click.wav"); if (_dsp.sample[AUDIO_CLICK] == NULL) return -1; _dsp.thread = 0; pthread_mutex_init(&(_dsp.mutex), NULL); pthread_cond_init (&(_dsp.cond), NULL); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); ret = pthread_create(&(_dsp.thread), &attr, audio_thread, (void *) &_dsp); if (ret != 0) { audio_cleanup(); ret = -1; } pthread_attr_destroy(&attr); return ret; } pommed-1.1/gpomme/theme.c0000664000175000017500000000600410543462347014736 0ustar julienjulien/* * gpomme - GTK application for use with pommed * * $Id: theme.c 184 2006-12-24 11:30:47Z julien $ * * Copyright (C) 2006 Soeren SONNENBURG * Copyright (C) 2006 Julien BLACHE * * Portions of the GTK code below were shamelessly * stolen from pbbuttonsd. Thanks ! ;-) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "gpomme.h" #include "theme.h" struct gpomme_theme theme; static GtkWidget * load_image(const char *name, const char *img) { GError *error = NULL; GdkPixbuf *pixbuf; char file[PATH_MAX]; int ret; ret = snprintf(file, PATH_MAX, "%s/%s/%s", THEME_BASE, name, img); if (ret >= PATH_MAX) return NULL; pixbuf = gdk_pixbuf_new_from_file(file, &error); if (error != NULL) { printf("Error loading theme file %s: %s\n", name, error->message); g_error_free(error); return NULL; } return gtk_image_new_from_pixbuf(pixbuf); } int theme_load(const char *name) { GError *error = NULL; char file[PATH_MAX]; int ret; ret = snprintf(file, PATH_MAX, "%s/%s/background.png", THEME_BASE, name); if (ret >= PATH_MAX) return -1; theme.background = gdk_pixbuf_new_from_file(file, &error); if (error != NULL) { printf("Error loading theme background: %s\n", error->message); g_error_free(error); return -1; } theme.width = gdk_pixbuf_get_width (theme.background); theme.height = gdk_pixbuf_get_height (theme.background); /* * We need to up the refcount to prevent GTK from destroying * the images by itself when we start adding/removing them * to/from a GtkContainer. */ theme.images[IMG_LCD_BCK] = load_image(name, "brightness.png"); g_object_ref(G_OBJECT(theme.images[IMG_LCD_BCK])); theme.images[IMG_KBD_BCK] = load_image(name, "kbdlight.png"); g_object_ref(G_OBJECT(theme.images[IMG_KBD_BCK])); theme.images[IMG_AUDIO_VOL_ON] = load_image(name, "volume.png"); g_object_ref(G_OBJECT(theme.images[IMG_AUDIO_VOL_ON])); theme.images[IMG_AUDIO_VOL_OFF] = load_image(name, "mute.png"); g_object_ref(G_OBJECT(theme.images[IMG_AUDIO_VOL_OFF])); theme.images[IMG_AUDIO_MUTE] = load_image(name, "noaudio.png"); g_object_ref(G_OBJECT(theme.images[IMG_AUDIO_MUTE])); theme.images[IMG_CD_EJECT] = load_image(name, "cdrom.png"); g_object_ref(G_OBJECT(theme.images[IMG_CD_EJECT])); return 0; } pommed-1.1/gpomme/gpomme.10000664000175000017500000000125610546033523015033 0ustar julienjulien.TH GPOMME 1 "2006-12-31" .SH NAME gpomme \- GTK+ graphical client for use with pommed .SH SYNOPSIS .B gpomme .B [\-v] .BI [\-t \ theme_name ] .SH DESCRIPTION .B gpomme will react to signals sent by .B pommed over DBus when a key is pressed, displaying the action taken by .B pommed and the current state associated with this action. .SH OPTIONS .B gpomme accepts the following command-line options. .TP .B \-v Print version information. .TP .BI \-t \ theme_name Use .I theme_name as the icon theme for .B gpomme .SH AUTHOR .B gpomme was written by Julien BLACHE and Soeren SONNENBURG based on code taken from .B gtkpbbuttons .SH SEE ALSO pommed(1) pommed-1.1/gpomme/themes/0000775000175000017500000000000010550765203014750 5ustar julienjulienpommed-1.1/gpomme/themes/Tango/0000775000175000017500000000000010550765203016020 5ustar julienjulienpommed-1.1/gpomme/themes/Tango/noaudio.png0000664000175000017500000023627610546031402020174 0ustar julienjulienPNG  IHDRLDbKGD pHYs oy vpAgtIDATxuTW.iW=wKpHE!@@@!X t]GUI=>c;^k5U~oZiś෼-/ag=,l|O* e8Smms,-'v J])&3|>ǡ3Y1;^Kjn pEc$EksϋLߌ?$udZn[3q|sSOQSp9 Sq8`qdbDoӴCrrhjQZ/$gh3-)H }Q1⣏@==ܸ%[(ÖEF5}Bsh#h 4:mm \&?&&&`ui%Dq@|bQ;#;B6^'^}bYGK?|^J8l2F7~,:ЏEOb{FO(0Xl:a}NxV '9B!2D~஘J*# tR+6??`ņ`iO;i?L`4(I&D#)9Knl!s⪿HRbE`® &7ɰ]!˭컝zՌ4DQyC$XW킐k2qxct.ulf3hCḿ8 L/3-`8h HM ,A/r u}5Ӎj^1ehm-ARY bP,dL@Rc}^(Oʯn ik5<+p#ci=~w='xFl6lvy#ƤN6#Εo&rWzὄ*'YZi Ӽٖؖuߺ>}FE?@\7o?(4dl'z&[5I-au"?kdڜ}C}ɥ!ZrdZH(oLo 韥Y|DU`<_0!P2UA8pH'$R.tgk^SÚ75oBSݲNK y}w=<\<࿹cO~nw͇4]0՜Xs9wibۥzgLZf"dܕk̞:oB¿@}gܫ;!Il.^F U 7ĂKC \r5lUB/ A?,-c"in}[j]utv*2]A_>ZNW.vs>;$+H5 ]╤4~w|ex34ql%E+X*\) (ذa8q5A<4϶c!X8oQWIMR:FNK9m?{ԀQG a%|V8B[T)me YAUIBZ ;wY:[ۃϸ87'b<࿙С`4*hw69 ^c8Z54݉hn@Ey?{#Kn: ' 6y9veV}WCͷTgCg}>52@{b9!~@uӇcQgV{+8)e9J >IVmr:: Л< bd,5㳋e# %+m,V,X_" _[6x{ގ1,:;yƹS߅~.Qι/=P מki((06rk@r7M>6H.2pvQJ9ݼ2WeL»I y bDI1Dxl m:҃,ګȝ3\>PR=K?l?ܒy2 ysyL۠`1!jW@.qg/_9K: WK}'UEt]Q" ~7Z䅼?~;O5zݨWW !8n|(drp|ONk!rԑ*%A:uAWO^.ݜI-T]!ːA%#H&dKQ#_,^_8|ҕt EzHWQ~Ey'ۏ5Wq-es.x|k@z]Hcx2W z /qL٦էE@h đNL!W| K>M(CiM"<%th\reP3l^~!VQxI!vv FY仟e>PZ e@Ȃ <ϼz9]kZ_n=ou``qϾb8;)\C}N RU+xAIʳK^&vx=8~fQ;);nr4>);Qi s YUNxC?ӡTx<=q~H t,Kj:~jqAպ8A뙉k7$oE(D塀_~ 6xZogɜn=6Yx˧?Az`Tlx/` h~s.rx _? j/YJ?Ϛ<`O`vƘ| r]%11AkS1G˃X/@S7ee3dr\s CbI T䥐X BR$J<%2g~ ήξ`]la|{M_߂Ow>_w[}&㍱[ΞW&\V`UguŖH*<#;$OܚxԩV}t౾K/zYRIjAg^U222^fĚ)I`M\xҽ\'7 hTM3kX?23f^}w5t`<`,D駹?68M |u0#t8~' -Zj"PY _P е@ot6@;W~,hQ=;Gg 1cnR=wKo -PTTW9V fg]8=*A4\ 5Z :j5\ ջc5X AfCĶ p8xx`x1E!jS/!ne\PpȬ,4XH垕ǂ/r B rṮ$[{{GPpd:CEyrE{=F0u/(DcA#s  q#_/A=ijaxӬW߽ZZ>@ d,! ^TɷR?5Z֭V5טAgf5t%K2F6ėK5;_a ?A5?1E/Cb.-6O/fVƗ:DiS-66zgAu5fr`wاyͼӎ Н8@_J@ok)MPI2pu޿u_)YOM%(ӽҹ~d\eDU@ $h&`d-lLn72f S^9u5ׅywB1z=$]NʓX) Z^0->s5R e{ǩA)y'YO5Z9C wf~ߗYZdbK7gO6^t{{<AU}bE)#x=yx/i0߳Do  ըM+ (C)J-3n7z-!T&ώ>av]z<,l{æ+ɛ2Qb^`Q <'F+TUܠiNM2@i@y05oɅ' Uk?QrL+{ֲv<uP_mm/Xټ-@כ/u9t%Ax<R)UuzJŗj`(] &=|v^z\jM!F8fhb`kgϹ T~%`4>>`memb ^m: ֎֒`0*ylt3оZ`Nu65%!3*Lt\ fz=NW%'䒟qΙw~{x}u˘oZj*gB>}B\ZtbM` nn^AQo e  Xp*HƵF48-hS$ :;lLQV =5.?./gB% B^M.H4׹ޤ~Y%gMk@@/~ošh/A!peAaF7"#ؖlԯGBu"k,TQ8-@4lZQ[ӾzБiS`Vkm E >9 1WZ m\_kc}^ڃERj5eq$ E$,zxVW{# ASf_O!k}~~QV`MZ^5R9-`+o2 moYw/4}W`e_y,a=YZ~r;1cq23g4gyQ-O5~e|- 0Hm]9 ڔ8h+ \;;PW;S2$s/p ,/S>VF"r)NIY^-{+7+ 7t!a^ր_~6?0s] ta5~IW*vǾ%7eFw9sxz9]jS~qq:'O52z *&/Xg(Yhe`nupl %Ȃ]|n֭;u >Ln=nf6Fp979J@9|s,r& 6B @8B&H{eȦK6JE 6+Y ږ';w3d~>;<`" +c-xGG!80;|:m$hIƕHõ"6HǛL ? '0Sv2c -Y0"%͈n c7~n $Z1D|=],w-,qvmQG@穩"߫O66e![BʁOz?]ͧ3i(@cOc pexYaÃu[GomIRClZ [6A c KL S 4zd f>pjssߟw&5OOh^B Zb$W 'I3> fg xK/@_Q=c[uH'Y@b?fHNAv0 9?8! h]]K= o@sknZ^ZhyIt @@9}x*aʦ[%˕9L0crx`^7aG嘱M1'm\D BQb@uYKuC|' K,bdkk@ICe)CALgd1grd*>d|3hk/ˌy0ǛNNвTciA% 7ص7`PLa bd`|:_h'ڇ߀̙:NG=^~~o $nJ<C6:7KX޵3 pb֠@KDH@QOV"@(} fTl7a-ݷ}̫HA:=>Ao"~ekkrU"K11jYۓ|/0L>`ϲS~YYl-lY#e `lc ::`e:4i!qd0sd0КBR~ d r#u$E9@ |>K=ӶBE)9*VCVI$z,cN`l1"$/8;( F."S#>+xCI]<<Okb Xs0;|"}K)ځ:ᖛF?m5h\m5R/RL/.*Z(xVE(2Nwԣ >WCe+y^$  hWdN<ҽ@Im^.![T&X.iO3znGkE3 w 59! 8ؿl-,GqoJ`|򭔑oA Q9%G'2' srHvD)YCqYI9D9 Yyy`-=2@O33(ހg{+kA2)w@xĉwQ(id8ܯ ^=xb]|z"u=M`[ti-kf`s t`Ybly=3׵.q# ,Ah9 р;\s4PKǿg׏?Mб@Ues 12SrÜڎ@"(guNM*)Ky '.ƭߙ(^,KL %WhU@[@h'tvj~ !5#VhuvO}--~[Ps9"c%'e` v'}p[Z }EAqS;юj:i:zoR7'oe *ccqYo9j`7n+k c2ղX R~#F4b@Vrڈ`#%Fd,KAV+drQ2ڨ FMcQ=ٸ X A+5ٿ ^oBR,=!53ui©gǞ&Cy T=_zu>Jfcs4lcts'3=~߱R_,F-wo'O|ߚ F4L_9 ~l{|8ckB_t.]ld&ݮ4K$R0WM+oE(@:\wnmB$L*K*zM}d@GmApsq>N$k?ڹ R=I-HkRC߷ǽo.s'bqbV R)/ rIH#M씖ċyr-@* rRb r eYzYllY+e-"@Hcb@^?I?~|i/@@G2 w Eon~=2@O uT{?/d-j(T&%/ d^Jp`z>(av}.;; r]=={Iuqf4#V0IVй6"㪎(ZG&22A_ =rDrǙ&yZ$QzO$4l 0dA&pnp/5J_{wL2RHuT H1)&ŀJTld7oQԳd_BIV4s9ϙ7E[2Ⱦ$\%i*YW;{iиd@NӍ@`;ظ~]>"QHef=9 ll]  l5t\ YS`{wOr:񦚹P[D_b^yR2]!ڱc.e;`ta'uQ쐮 -%HZ\0  $L/>HX/W%d\)@z d#|/%H XJZdLi`\QD@q=BOw*8)-L3ˁ$Vw.>v: n&83/)?ʹ#_A ~Srș;4/t1F=@u4NP/6uq-O||V H-W iڊ衡IԈl<z|f(OS iƻysj,8وBF0&aDChk:]?zzee$ثssO_w舁Ni/s,d1ZeMejsȻF]H}Z @Vdya2T`UFOJh.9"rVYrZ΁lB"Y@@I D;%RF di-, \*1cy tw?]O9n|VֹG3}01cH!(^AB<4dkRwnom x{G l`9uh< ` L!2^e\5S.2W]j[-̴Y=.D9@I6#J|{(1Λ,s)8lW;C@sh! ;Aܛs_V|]Cޡ6VV 1>3F֮:Γ,H.||7WÛ/bNXGoG?0>3>0>µkOm(Lh%Kt46OO"%QRLuŷx5<=YyZx<0O+i7@gH jj vvpXC| ԜӋ \†`l%p, `gkoI>'@2N2o>dܐM aP@z 0MK7` ! M +ݥ;EKZ4;݁wܟ-Ssw]=]޸`.s:BG+'"H}~ d{@W3R/+; 8::g9{ҷ-M螐۹vht*݀`64Ъ1s=BB\;CwiF" B_x8E)ؤ*hg8,X^G-0{܏z/ y<&m+eXmI|Ho mUT222+un@SP"x__a_|Y̼:ZqjOސ^x2XNi6!$k.(R gw-w88 ߶\,xq2$G&ےr_X[{40!맬YY`BOyr tPpw3*Hwxw1@Y=S0ںNҵlm@b;s6 _gqck9!-@K,%@AH-րKW  0 #(a KI7 #L UjJW4~H%A 9 򃴗 UW92IVK,/xHNi`DJ{I\v]<8(+d0ەdznox~d+[AR\4w-@߃A@@I&O[sNjHϑq?'ܹ}}'$In"[pOz楅 [p<*yg38Y=YFsɷ1$ 4вZC+ChyiwC*Y;{M T.p Zq7rRt4h^:j uƴ1 ѐ>fpT`_~ǫk. C6RJt))sS}3G2AmM+f@qKW~h[eUPQCMj Ќݦ=F3ڄ+ͮwnP3 FA#6`[mMw.f`d$He0$\p"dܺolR@Y|'de$@2i#miK[49bߝu?ȿo{ 5 VJ>`7@k%0І2\+=/-%H kW/[  {cm4'?<#P2ǀXPf*?M"Bʵ)@j65pj7eVaR,_]7xYץnGۅ~7o)˰ {v;v,eVlCCCWymBr%3`09Aߔ @Q} RI*JUajhcO=z c !+{֨xQrI.|(/ԣM[Hۚv0m3$L?.~83 b ZGE2eMzH=u^PbBr z{V3+@vݍ*pp~ W]>zj>5\$c;*ְ$\S=!T-- $Lzf|H! A& F-LJ%]@zHRYjJ-URH9 ۨ+uAQ~9,U ĝz?Ja9 }V<' i,e%0OR$Aэ0@ {iߧZI|Xl ݉% rU%9a Y5t.qF }uzEҾ Ol2)5,2hCZh3xUכ@޼!SRAרݥLlB5+ U-)4}9#3&D=-a,}⃿FKe@Jdsqnd5;AlEyv1=A]6VZ ]ʧoFc1xRKNINhuMÛ4T$P%Ov CfS[GvQC9#My%(g\49Lg0]_-O58j:8wBu!!9ER>C;K4dwudG3t.g%Lf|_hC@)J \ u:,^qg@Y7H+; E;4koda3^ i| 1䐂a)) lt.FO'N`4`<\`t1 J !NqF t ]$ 5-%-%W) }??N$◣[v9xy2d ,H yȷ 7X"yfV9P/L*=/pA~ 'Gq:àe+uu \-&e2~,̅f H) Ͻ_N}<0wT< r'TEظLhͣ^*u.z^o9gh63OCAP|95*ɾqdӌNZk}={7D\,@_k"$ Μhւgt4\[q+ rbĎ@IJP (D!}6ݩH{|5b/Ž RĥƂVֺ&?0{MS/ c\A@\m*5 ~u˰j.w `?K?s_xo3L]s*0M: E@ete* )RFI0Ҥ8c1,A:HtK#T 7RAJap@¤;m0{.`5zA:Ktg;@B yE2+`H4Wk ZYzWd|b @|4@ޖ,e)@1@%p20]ϛ4ES9.Yہv  1:IH*]@Iikt E2@B$LBho =$BJU=> ]c^FMJW0ZrVF(sR[jlv>wKZ"-ρ&, )mA)t(1m9(|7T<\>g)PlU+E?ҁ V >uH%}#-#E57!́s'C#c x3+}!yyʗ!62h|7gNi[7v'wnCV7^P8y(j%Ҕ gVt1_XE=<{/?W>}v$`0ռR:U%w9Q kvjJN/޷YhOM˿@vxE)Ja\0 ROqOvXRFLr@v!d!?=,%ӶBtxLTXKFp<õ>:BZE2dyrg|nT97590j@2u $@} Y(h,oaG_΍:_FHs:($R[hY0I[@y 2X`0Yj8 ݌ 㥵#1n0t `4ZjtUѳFHW$]@"tqHn \Szlti H7Xh7ƃ5Tfgc&H]!@JK#cqҘ 9Y&K`\4.J?2Xe㲄0n7$??t RQԗ @|]yWb]=f$I0Fnr$ER5A.+d\`Зqd|PV. uf<8wgC&~`2 gyGct`K](MfH$t} #d{&O)&򛼔OT=YFpqΥɗ&5ǿԿQ3$%妮aW0hkdmk{F<-xFH VV\-?! hA#}̔sMpuMW usj5 Wp~OU<@/$KޱEc kccPX"0:Prm% A37SoY;@tB7:\ ZHikZ{. b!/wͷFAfpf@R~ Gwr e| &ܩp.hܕ #$ . Fg#ܨ$nl%.wHWKh4jtrztiԕz =! @"$T-bat ץ=5JPcP^B1ŋ t O~*nQ̇C"Y uT@FkNH:tr`(;WuMe0ͧ_"Jb<$N&5mg3P^tͯEؼl١;|+I`'p;L}:Tlsn KO& !@v -q@MȐ1bM/GUmzc5ӡ "F-ddD }FWT¤)HYhk5:030;K 73o@"ܓ{b!cd H+@MVFk`|&@HɔUrd ]Y&g@NiRH T`9"HD.rH wI=XƇI,j&W*Ml‰kaTR$EH38l*6QsբpiNqJc@= -eugu ISc#8;:kfz  R ' + ?O cd|zB]ӂtvYFHtQ޿s锜ce0A6R I:oќPLsթrj_[X-@ȧZFp 5}GцA;yD3LL^y@q{hHCjccYu߅dRѝZx4q_WoP#v` Sqq쇱4IW .ܱV<`O HeL|Sy;h'@Q[VpLl:/C =(fe @Udk +8X FH) KK6 \2`D^#$B KO0"4#d.a̕YCA }tNN B:Kgi%7RLp`43-t~'`6jRW~FcrL, 7&qN]rT.ԓzrD%: vC>5(<y\=OR\cPv (1b,_zr~!sh m /A@Kz_}ODȘ9/s ˒efzH Ewg@ȧi 3@|di"Ad]VL|HSAŵC[) a YFW{VOW0i'm,YY@A5 TX8FW I@^K4AK-0 5@6&{d*WdL5dH lR@F4 ʷ\X,?61,8p0}p,ջz-Yp^s+3^& tA` SOԓzVh@%,d ~|BrSYIM3C 5BTMXa/a%泼쁬j@aR4 ,z(7d^{j)?q.N`ؗ3N$uOC ~+|]PB/ ]\.sd͠ t1ف6S2\=G_@VT#~;!eg ˤW_I.B6f)HȑR~I>hO&gN2:l[藷6%wdg'şE= p0_7 ߫GL} i !30sFW)g[ď嫗^t16_3@2+HUy%o\r ̒ LA$Dh*%f +,,$M , %m݌vF;.F\BI{?m!a;( r UA$Nz=d4NI=Rd,I /ӜA }uy,AKc3I'}GdLT2׫tT?%d#6<:Wz@FFR@;Tta2LOK9!3*qaTO#ՉҘ6:>|tKugY/FW=) :-k9k҂Tyg {a?Kځj/V2 [S+iydI hC \0G#Ѡu/_ȗ5WU2*6A:ƽc1#:9}KztY b@|y^l-SQa7.CGa@쨇Qw! F&@nw+C.t8x8grM7tOkv23BиtB0~2jXV+.jzdQPvs 9!y$%QdF/y_@IF9KJ>&I@]. |aDGPDHky  HO) Qe t s+c _Y+tڝ< bWO@vH[`QMN*SrYW+/}s O W|%'@uЙrdlW HKS@_S@@i3 ձ1F~ :V'm!Lddesi7$CMbOU,oܓ[12ӤXЊZEϩL[~J&DT>NݕrViGuB| :=عfS +[Y4L %{ Z[ptt^}W|dL8Q-}VputJ2^6_iNnl5:4HZBi`aYlY \j2Tt\|ei9@S йtX|$<ďM0'#">![PTdhcsYhpR+{,l< Ps3~̦fg3dlD&022;Hd$LZrƲT,N ܕ`FF{&@]F;irWH8]i+m8) l% :뿁$'-0h ݤQbzWjH&xDvR@|JX$AP~ yG \p=9p1@wNYmMx,c zR@Rxz_sԗ: tbh@2#}yɔimoԯn!rv`L4ҍ;߷$ ԧ5]kOxWOz hǵh8oK ljd蝦Oqg_`li J)W)Z:99YooV0Aybǿy4F{ elOo JPte1`V6?1ہm=!8:8;AГuAGѪQ+]`qʹ}Hyptnp=QOZ@jIAJ#yٷdZܭ?b{0@ZL'6S88nQiAR'Lgy Wyf4 e49 H` /Rh$@ʯ=0 Q}s0m =)/`411.4`t0:]@K ]hk5ڃtNwh R^g*d0d>?H0H"ܩItŕtQRU]o]:%" Y$  * 9gA@$ (*Hαsw }7q3F=kjs9,e1$8)LLZ!D](e"2Xr0APJ0ty`PQ )Lu]EH;C_ݠhQO?nqKcD2Y@CêA$72ev \@@J`oN~t4*x}tH Fe_f --}wz@j~LKrBt*o.ϤX;ri٦xZn.DCgI/HH"[?(Q،b@xFm jA:Q%`kj=nS'Uρ(=/ ׊\{jMH1'= dܗ@TH 4b Ld2*gvg/ƙaO- ;n><ʹ7!o<\o bV4g8Yk;0Hd虙GyoQ-,f2!ὄK#z`g`.+@Ck+t 9?BzBpS <g $Rnd' U+A.r >*a`:䢴: m#$v\KOL>i H4 %^<'LC &BN'Āwf#H/#A2%]A%ܔ p> }Pȧ7HY)+M@F(6hW.ђ-AvPV$ e`=Y09 f6C!@=Qt#w)b]Ak:׹4dFZwn q\ UTmmG|T : A;ؗ@{h/B? ܳny 5 ɋSބlmDSy$!53 ctj$`k= ;*.iХk]:Kz>;Hi֕Sd5P5 벿=eˀtUNk b@z8&)obʭ7̒dJ2ƀ#/d, jGՊ8FA&O<ŊK,Z ^}&hKmB_6@RP)vV;!Znj|zY_o@Rd_K_!_*Ŀw!0>6`h4"_P()#υ!3:Lcɭn+2yE&> ࠞ(4+@HRMJ5rOփRk&Aze=RAN$I}/7HPwa/ˀ j<-?hxO HüA֧e5rr8@'@HWI HϐoL SCr }e* !*Cv%)IIR@QNv׋ ,4=8|ɗ| ꨣt4S353X>4`=*P nv/f"7 /iҿ( ZL\?ecPݬ2AS'yƉa_\N *.IKXJmޒWy?mĿ3(g Hq҆mbK~@,E+r=>=Uxm(SR9yeFb xh&^c:SaR t]jÝwv!uY{|.B 68#ro* / ##ǃ9mPbs!aA@ik/;Ý-/W= 끹qwCᏁSIjȼ-Z#c8t.C9^#wi ̖2?BB}× ʸ!:M]+u%1KGrP(tNPCXct._Wh{mDfM}]_vz $YZ%BO!*(\yxP"_Ag*=2T^AZ KL H'yZJ59W&T,9 yȳ2_DK0!z9!6>rlg,&4~UTb{o71wLRԔ  now{q2#!p!P p;ߛAޓ=]_KP*W* Ɍ,%~_EhEw>:ܖAr/YJonݭA\ )=%OAo>su® ]3֌.^)bQX p\pN@Ve"<º] u#HRcfgS\[;9$o|DOnnbayO?v.itFr\LywƆ(JQ(Bo /Ȉ"u4NӀ7-^6/= 6eni]) )eON? Q0~W,Ăxy=w"+E%G~D'×6s w;= <&:d-s3ȚCL 0LP;َonQ4UXq:jTuUYʂf9t#vJ4&ͳ(h吙 =d_i=8}&KrN~WH3]}OmF-s0yM^d e]_C[׭II-~ N%: rR$[!^M`\c JP?3Yb[un6tNiTC ]+@a ڜE/z ,ct1]LWhhXͪ˙fB!aN|JAzku!,UҊt!O.M_!d8>(bD~]|ïziuh 73lO?vN ^f PPsEʔS#.q`^7PB? l/k@s鶸(Cػ![X,RSRNapܷ$?0'X@Wra6,%+DfH<NMS e[4o7 J- k Og}Lde[7V*hk&[b$,e9l>7A1@jМ](&[d]D@N~/& 2~rIKVdwt wRXTLy$\, $W(t]A!G@Sܕ 7~9ș+DL8>Lg&޸&t3&PTM{vfg38 $ đU_ފZɺHͰL*U= %4LQsdLO@ K)rc2Y&d`X2D:׸((В?H7bLݩ;ufW_$+HSsjNDM u~vd7E9A4;n3G /_weq1zGתYAk=]N<x𹼥U _/{?mĿ~ڭ[ /`Q_ +YndPjhU5!v}L-*!n+*{ϋ.1Ơ_k~;yon`gۅv"7v"^R7260W IS|~7|hxQ=["DjdŨ. 7rG77nNT ΗD3-3u.y@Os O, \F qA@>7dDIH-e*d󉉗E& RDҥ,Hv!A|.>+%$|!AHd))g ZANQuBr=3"Fl N S=k0ihSnj0@k']zV(^KsŝjL2 I20u+h>ͥOѵ:a7.@IJI>pZ:o&B ]΀4L4l FVNg Y@SY,g T Q< 3݋^e^Y.e9``MnkXk@i!zP89Wkھ31-s Fy!Xˇc" *l,H7钚ok]̕900t=߁i@vp$=*sGK&Ҡp~|诀Ou$ uՐE$ O/+FypMTW]Hp,8dݐuQֲ`hi5GytcܱKM {Oov$OzV҄¬K9D6i:yn Ό]=?^׹ZV: ܀m 6® .9@ M[)W@җt>`0A?:(hu*CXٰ!jMɨ' [ a,|N. v' NI A)gS*IS@__d)g k,f=ZJOh^Uai ($${*aԛ ff"+! eD)&Q "!I"q$LrKN#9 bAYe|)? |K|=|K{`>4\07LY ܓ$`ZCknw`O} wd41AqpN`_ oʹNgp8g E:'L3 @ٌZ;^QF#4"+HcyVoZb LL͇F0YD`<01cGB(p|ǁa$1 @=/y`~`9s ci ڞ-*ozVnPO(dWv_|?[9.K)s9 gݮoh Up} d^j# Q;zWL搭@Ga>l&`twnGe)"6N%+\ (d-[^pF;'.)pScyUX{uA*p]A~ Dƀ#$XFW""r#"F̌(MwFLYp&9[sGLwGo78F.-?diXc@-g^(PJ) yT*Ciw;= )@=-dP@X4W\-qA.!r$r$Vɷ E$N"AW?F,ؑqYbaJ)_"?|}΂3 6?얊Rt>ςa ^$Jn)v[Ni[4xg_:`.K0p8 j|f84N)nʶpoؽ N@vy.fdc:Y%@Y'd&'@s,1)1`2P09 9ҳW/Q`vg?h Vh ##;h. Y.,9 zD#<3L;δ LZKM gpf:u&y;M؃XwϫyCGPv?)m `@%^ ߄K(] "t$!쓵۟(0§@LbŘC@gL М:\Gzy+^ fm x>v%mKj2xռJ^1RQ3(]iC B r?l3|.Ol-p?N\rΙ;`;xH6O<LҔnBvIDAT%o Z' >aC@1Zt&y-Km !)D[p{ 4<N+i O^Q L+ ,}eHn)Al9-W)` kN:p;s:>o6g_Wmp9Mhpw V\9:UW l]hͻ~,mdrtj7X[ssQ8;8YeVig:a ey S)[}nӐ}`,A'Qolwd#jj`,f%H;:rAr_K_}@_ }$$3H`.n ֠]$;q C{RNJ9`GTKR~_xf34B_p$#8vjL&8qc#>d\dPJ|d!ʷA[QGF%<&+g`??  h,xdl6ErKLjXG*"boލ ;Dٜ1]ԷIw ҇t?H?!oB`}PH/Q&1pq߅G*pȗ/W78)ӊ{Ltxk{ks^[*0~54P&H*l-`Τ;?lЅ.#pq1R[iМ`AW܁^AJʗ dlE@ M H upY(a}İ 'c!͘SY?9eŬrq>ǗɾwNKRU pւWj;i}Îu>gS.甗9 f)`iff`pyMz" 7#% J~!5*d 1M7;.~LY4i-x ҉ 8K$gp\ 4bA7 L#i 3u63C@?1H7XA<ۖ-cƦ_4fۮkjW8 +&S|_8tR av]iG@7b~z0UtgEuZCk8ŝܼ'/ꑄUڌplҼ]!kޏA WGLdZe{> :xm.^?޲Y1q $% ^wV@&)3\|b n.S$`3`Oݳ1s+5sKNyAu P;3[ݩ^-df΅+#yxG]ʂf~ F5GxF(DAj<ɓOD 4 "Djs; 36dp+K1Ok:KY`x oR nT$ltp`ƙf 8XPS< +9_7-_/1W2TTt;u Кz.yyYsɋд 0Qff) /ˌ`* H?h. 9LِC/ˏt1<xrb 3?DFYR"#F"ZՖ%}_F44s $}.d~4oЇ(K&_ Χ>~igس/H=vY I;i0^~V810(dFd6ʸ ZS//b²4ש:DQ`CQ4P"Ԕ<˳xCCBK"O7k`7*19h =o)p7'[AC_5v{!XIofI+U.jbBS̗`^7]$S#f &T5c9Ly9`Z{ym^/[\24|)g@K/iLJ3&_6R\ʁy&)2L'OIg{,0MZH;V', 3>ŬY#e yy#sHlGo،a3L He;Rw.ҫ~*@[RF[u^{As`/iff`j0ӒPPAA#SՈy{p ƕi9.1 N]8jhNP l~o[@1F&ȟpli3'U]ܝb:9 )Ԕr!Z`f yp47 dJ^~[JK3[A4{̫56Qf38;*(b9%${3c!ŦN +2g{RoĎ/{~ z\9Rx@gЕdr2d4`=<]3[|!w)@@4 ŮP( slgu橠@KI!d*-VK[_(HN:NqKvd |# kyN'uiW`ڀ3Z[;N50=LOl@N R ?#AIMW4dp]\!(rH#@-E3t^8A|&.d,8qR^Kir➊{"SLԺ $' @0d< mllKK ܗm =F:D2E?GSA?V9Eu=1ǠMw vj`GB=@ͬ|z}]đ0Cs̫3L$ >(;?j(M xӛ7551L ˧S}'jUI!葧sEA35)_S)A,ہ I y "D֊ :tfjJzC;\ xsbq`ζ+/w Ws~n_ wbF8iGm0#5) 92B`0 ?>@WQ8η p$黤{9r-wY4>siMЬ(/+ D+*9x 5 7D;t1l 3d͢ ꌓ-REVԗb),# Y6zv,p~0 r>ПiJ10AOLP$%؝pgO.t%ȅs-n~DL 5c ﱄs g5Cچ2>i{ӛf, -YAVKd@, ;k4&!w}K =1^yUӠ 2Hw%:-=j"إX  UUDB(  s Au3.)^yK#q&SAi|6n/ \' y@iUMy]˫bٯG)VTVKe?_uiݜ5 \D4=I\}0'K9YG_7$ݬyi`#l]6oݤ3"Z[kMdgaF(@\ڂVs*vd[ fPǀ y˜Yw D LИ4qXͫ|@si" C SV&A(A1`k-}! ,IMJ$$, _\,H@ |.ke8睾u yX@RWKtѥ: H1hgݦ_nuGumGEp_j8[Ɩe-fن/mK[F0m ViM~C[`5t3}Xbu8pQ6m *bҹ&hymM!3wFI` i&X$FVIof0M ߐ},dI13@D2pR[*=Lޠ 4NOieО|AK׀]BEP>G4LKKP×0-M`v)m ঠhAu5k 0{6P TN}Jk 8Gxw `) Rԑ, humϊ$)4ܷ5 'U #=!Ji9S $6h-+0PVkq g = g#n 0jG>wuKw\~@8? R@/qI뀖Ңx7@tPmRb8D,8{>ݦ@+2隸&hq}d%m``mt4e: WAa @Ayatvr}CsF*~` AVX*j |!d&&;IvƀZlI;Wׁ7δyan8cp8 $Ru6՟]uˁ;};kw`؋O>Oh)Z@π"tͤ=@((]] M@Y>+yY ET|Q` C$p,$0҆ns@~Ձ:ԏUTJgйgH }GnlPG:|ZʮRU 4-=ƾuB`H H"|J8k6u287d?џ%YM0BL;`u!H*ZN|( 1S, LwSfOՔ' )1QCqFG2 9-'? z L}N];4/ћ`#eB*?qgCAҫWoD`94 *w<=!Ђl"N3@"'ف߀ڇv,3]< f\`6]o^ПE.JC 9!P*\@}t%^O=yt3IK_`%s2Q ?ilS)D]i)u)e-LٰkTٟWMfu:י&swq/88L.*^~t}ʾ-@&ŹO)^]+Eo,p=Lo]e-;&HuAWR(`3Y,6n /A0G\G4P[_40p{k~/8ڌU /y浲 NqZJp:ۜ_@jLC@ f/ȇL@7Y'AڳJDR$Y+8Fiev76fG zh"2^3wσ#5^W8rC`p?rz8w$ׂ[ԛv^ `Kc4Mv lCжkuEt wú~bFhO%ͫ 9 L+yEU d=u<T C>BtHu%BCm@.z~`骩^4"(Q*L}ȴ4@ڥ}DieZV`WqԮS0ŁRQ M*;\ %"HHi0`EXlUQ3>CA3lm-4q@R E{F;w<ݟ D aK '/12L7 p2sN3{:Af$zX+u>jz;:Zi9$FEӮ""4Z5)Rx7?ÁDڝ 6 M=Nu6w_R tbm o7h_f3|109A߫%pOoOy4gAJ(k/<*c2 hO%`@DID>x- .#4M/-ЯK6P|/($!UT2ܖN>0^/ wA:-@+].Ѓ4%LKxz=I ؂< l7[ ݢ)HPi _B0x4t| ]0;N~0$R~!dfl2\Jx>IRJG-`m. .0A~rdL@.Ufwà <-^#9n.]Vp;[īOaxI 6xxޓޓ6?x6^Nkf2`؞v%ؚ9 ر aMgN!f(^FX)g$ ȡpHd1}l) "0I٩{u/H&@+5^Azh3 h;mF+4Hhڛ1|6i] 6ym 7͓rQJN)yd<'=A[$2W'L`,3A:4>lo&6ہRkHDE~~R'IB順L ~~|.Y%+БH"!Az^σ63>:]RI3Юz[oҦtb]iƁĖU@? -ji3f6;H+H+KRXܓCGU@;.d|!9 CsPte$vM*RKsZ ]az^d+Bf-y1$ ?a͵w{,>h{ t lW4haX'޴4 t& ܡ8PGkDC^|/DqC-7X fY&vԪ2@$#N~SQw5C?~=*I зa4=&ݼ|ORAѧ35:ԎW@{Z%^( (=_s0ͳ]|<"/7Z''ŁFCzm\⤬]o}]'~RV2gAu&l/9 &M0&9 }916Bg;[=p7ܯܡWহ=pK}w~5{SO+^v/zm1 %5Kp*;9߃&A}d^(4 2YJC3 r\N. u 4dr$dH egjWL \)a[FJHq A6-)oLq9z$FK ɣL '2Nr&؁d~Nl0:[0&h >aPY|Mާd)'],KLfCʓ m6A{ig(w{/٫:N=H~RhiН>L@i ^>d(@:C5F3G.r;`FErE0Ȧ( : c2p"L}Wi80SNPr@.O4G@ә.3dc[ڶ ժT`HG{A @.@;s72)#gA"&L%<LV*`^%A%wG֝e.urdeH"AGHvcYe$lt'6dKz/-ump[ŭVӁ]U#Fo/zy=+5/W+>QSD1ccSGl$i%9++d :RVI @{\_,hqi(σ<Ѡ/>v`ڳܴ]mjKdo`grXb ؾRؾR$E I rCt"e9'S ?~DnqC+Z͡&˼-[!筞2gOkcըdY.P"p<9 sA [f~Mn&j M$\"Y,9!.y_AF:8 ΂ :iTnf`wpJ kH$aZ`[v= ص*NځԓR$S).&$$Q$ &e.1HHo2 pgCƵ7W@ą+\ 0MkAu W\kp4PRX @=2D0.%A4A;[RL[]1R̅Nzf0a6 NrO}LJ]rRNd3Mwyr $y[a=bL}-R.CAVK:W4_xd@V 6)Bnצ5t ٟWQGt:9=q_{s tQD zX##mLHO䌬u~6-fK[RQgj>M;'f摁4dq"-"=? (D! w5t%7y lJسaa [;h-xEmH:iF/ xG8@zWMj_AIz/ݷ g hJ}S9褂j~23d ,c* >!/(zrZnw7E{pGt]fK{\p|v88ם:pœpk$Ht!+Ye2F@]-ZJKٶ`Kڒ'(p/6/Krvƃkܯܝvq۹[ P}.Vׂ7}؛ZKkm"\ ,_bvyF`5 Ti! |3$8&π,lITY dd!C$0IrVԛ| A7 rRNIt`X z^{nf4fZb7;@J߃$3%'y@I)&M;bNRVfH{S| f<' $ROYBV( t}MORxSP֏0C,֟?di|,7:LH;54ҐV#Wpp\_OW}FKlޒ,YA%3ӷm}!!3@<($`z) d@*i$l%0\\hH)@d'A7[ }םf2-@ _^NjKzA*I% +_`Gd?__eq8SΔ7@jԤ#݀>< 7-xzK>Ǥ43qxM̅A]uo|b>2gAI6I/)\6tJZIsD[lS@bG]5փhহ?'^s/9pq'maؖd]=R(؅Ϸ̷-kAZJ \Z`]4uN;M4%[@&zq>wA49SvgoFym o+\?dd8%AJ^)mh7C lN -a@ )!hԭiAH_ :A7,r2.pN{2d*_i X ^K|k}}߀npmDԒt!@`Yp>{Le3K2i 5{Y CY2G[rD~rri24z8; m>HjEr&=Pr 6$'pk (E˘/nɬ\e`6CM2Ǽ]4L 5O>nqnv9ePbU!Nk ot /HSy!Dtf -<YC@ e;,/&$ eDUF;k!דҥ,'[㷎RzЙB`gި3ؑ)]z2[AVb/6*dyXhDz!W>W D)'u@|1%I $wQߧOo &ZqlbLqIuVrXHt*B{(/ |gpMA.YKeDv]X?t[YS{k]$@L=ˈ}Sw{Rɻ:z`gf6O&O^K8$^Um  @ړiRь'e' vN3% h)dN׸b9Pe;peɕ=';9Lү>Tju@ H0T7A~H3CF7o/N ij癪/[Ko9̌ʼ/Ng7hgy=S,0`1`<ߥH5%[Kbd1yM^f TD""P%ۀNۃFkmmۀ}JhUiTZyW}uwm3nOn{IM'Ѽ(<ÅPѫtB DՌērL/43N6 !VT l2OdОDa$2W/i ЃZ#yܛY?=iط# 2=ws[pv3Ёtc(H8}H̒X:CzN<֢lY p8;vI<SimORL__JCP,>P߸A)@( LxTl 9 kGBbIh(N@aisz?`:_N/EV}× G}}?B]yR(fCsV`95[rVR-L<x^GHz2y_r` &AnIv)+ $t-~FFSl!m-Fh[ ^ vmfUt[&7{ڛ m+Yj!mh952g.x<2"+Gӓ6 @_$MAJS2dK!AI; ',m e6Áw3H-3f4VÒ끛pi̕@6]KBxP(tT] gݿzx׃#wkQ"]Xl.y8pnKx@ST'3 UpWsA{v"lޔy8#(Hl>5A<l"2SNZd偼:W+߲C@​~x$BI7JӃ&L[-$N~?q_ 4X@C;ڕ@Q9B.= 1ߚ@i"(3×G+2^I?t' d*@_Ju hE<̇bZtלS?ܛMk X(e2B6g6Zږ`s[ =>\;ޛ f6A?: C܏BZn6Ķ{5g ,&3@~r`.i0i2JFI#kr d.pQ9Nx.`FH}.^%ؼIQI۩ECsD-_T Cp30LBU($D"ma[DMN{=u|2@E'lp<ba!@ ]"e Zth{N@UkHMjR]n{ֽ?sIwkR =g 7[Ŭ/erB 䤙 :@_;'Ag d-r{Xm7"_(*8ǝa`߳\H?~2ߜ❸e񳀮>Kp7lMvL <zO=rAXA j7UH ݸ d)AT l-T'X # L#⟊|V:]_S2ϸ9d, H^fpIM=7u.>5lYeK`1n6eB/.R(J}V:W:vjl84! HD_ )yAI=:h'q%9ftZx}O~W> %{^*8ok"s, g/7èr1lTDα&{"8}":Ft /Ht!!.*- ^is!{ 5Ծ7w/r$3XuAz*A%90f;XYu׋^zaڏa+"ӳ8R#';,t;)RN bZ)ϳ|{|*Cs'CNz7{7wKWx6!Ѳ@''>tG zW{j"0wAvX>+|.{6Q9p~ʋ򢀺d#12 fDp;08y` CI"0"(Q$'Ɉŀ P%A@Q$ <ݷ?FyߪK=Oqn}ԷxR G]G}=PH}^0 >H}/eqIfO{An5r$˘ қk/Q@yUJ@/vXrs|bVLίvEPi=}pKPsL5BAPU15T/SUQݨ6h`)Kn>V]5jjIwPV*z !;G5We?ź*^;l8s:VB\HKJ8c?d^"gDD{҈fzY O^ }ɳKwyj R Ru/xcP\2@h;41NrQg j!%xV,p yXR@Ws RAIՃ@eP5e AV InVôu.@OzR`H__WŴ#HUFQetYhg:YNR@Ѹ{WmE VvBۄ [hiSs+sWBo|Nhy%Bu߅/I^a*S y))`7"\jPk@Tx|PpoI"*W=ʽe bTZcz^:pL}̉yU*rU_& r͆xb;FURE|';ptWr_]=\/Aav|]]RQpotru߶ l`#$DJBvHCXcJV .kyKvNͿH# ?X&}A" Sd-9|/صʒIϽrGHXiVyqs[tD%w)quoC' O3=Baサd e":X}.<x ࢡ!fV4r-ׂJT*T8T8n8T7`2LbSCiEHč 3l EdL`0sdʃ,@:q2hHCohjy5 B=ޣKG] ʧ|BkZj2T:d |84ֿejH,||| ^9Xc:]tuNmrYEFǯ<~%߭صbWp7Le@VgJ;Wor[ 0'{_OQwZMom(]Vڹ_gO.ȅ)$R o <$(UBaMPƁQgc [ V>Mp ε`qq|zg^x 7U cu&ʊ% / Q%} 7{bDӀh@_-LL|}I$p*Tw~]5H E^T^AZ`(Є;@PoKY$m jDP}`}hov/sKL#`]zZ=n̘CGqt3H˥~!ȉ@@̿hA._[t>OҠA@!9$ wq&qDcPkq2ytFx+P7~rZ. UQl44[xf}/M|[1bnJO uPڝ Yyx%%$^+Wd azq3rK݀I'k=8q=<M-h e)JV/={C@FL,$(<DgQfGSPJH{4G8KP7m>^R7'zH=P6 @ TU NA EBUݢTGӸ©A A 4\'=AJw9Xڸ[#\0rWQ*ktՏ^߯uk}|^OaZ*GJVI 9%qhҩjz^4+<w|umdCXeV{(vN(8VU&kH*/x@}xGS2\l`}[`Z9\ UxJx7(T KjbW^: \ZK#8Gg foب'ҝL7>|-Tܙqf1H6 ))pruN Y. #%k5փIL[o}k?rOn?ŷ5'-SC_ϠB )}T_㒿h09L0taUUUUU$1 xj`r:F&/8-=vQzb#yMQvJ(B˨Z6@pZ#m-#'h+)xь; }`[8um ONodR_Pp/pw`#*g{ q ,'Ptբ<鐻;EA4{ qq9 B.T=[jfWA K<=py]o9{2vytWf<~ \ruO@K4fR;+}Jݭξ>WoףisTRx\%hV˴8u'-X8bB,9ql2q3EavKйYzc AǩOǷ.Fn'uU d Q-P>AtZ?T/t+~]?e_Іwm$3Z߮TVݭqN<>Deʭz9suy5-.J 1hhps:]nOw{dۮcp:uCBR B+K^f Ѕj7Oξt\G@hG'En9'7ʍ>+7KTB ES@5SUpw"FfFV U b*Jb?+5;tICҐcH&dCrH!|H! ojHKv)6G9 `L 2M$]G9&otx/BH'D 5_;xC tyVgtA:`ϲgٳhw;.qI K.W\* !k^/Vz֍qݺ$O'~\Ikt%gegBu`{:dS܎r~-7 @^ <3ғEӽu!|pvu95 ElHe[a֭(m`@QdQr#prWN0^P*șIQpvr}Mcws6TZPqQb(3e F‰SmRڦ NOzPkssȋLdyEfo~C@,E`buqgcsd10kÿ yܓ9WA_w` <(BϾ$E,bj\t[VpR@R2RP yr@28r#{xJ9!'Y1-ǸDCЏ~2䤜J/^:A,/s5ЉN1^o'$#,HH!U݃ eI je mZ7D{~~×/aTm}wQ4&:رJ 䴓S@aNa‰nV9n$cb!csp$NK5Q>~[ FV#fN}hGO6sj8nq~jUZ;h9{=ŎϞng8y2Oq1"8s28\L`qLqX4Lp! tpO| | .tO,tYc>b~?ÁtCs2 uv] 7눡;HH - d]׮G>!3Ew9 ,!1Np 6`5:׬tp/d(Sc,I<^I]悘عŲ͹^P3"fx5e} G+y܆Ⱥp~4*!z&.uȣH:J y9%llN66T|X&ziØWoD]nWOggg[?tO/o#ɪl{5 RS>WnM]p޾[5QgUu< ,V} W&{ ++IJ)[JzSW-y+ぇ5c U/C悇 wͮ 7qcכ^Oρ@;P|um5w4Kl l}_lsP-PQrm5:Wv&C ΁Rl8bK8coN99vKFHۙ3cҖ3^UY RVJ,H%$UA4RFHe^e G:LQL2, !*p]"(r;QDd rD (O6 [ H@ >kCpDSJ=מ˭\ yT{ 5r%W5\K]ŋu*שz}S=5qV, ̆@ه!5gׄgEs S#Lʰa!kR K+zwVU2"^~=ȸ{!FBa xfi Ok)$x_kS.Ӷ'|w^ӷ؛.Yc䀇2Kjz"WSazF\8utn:1ţgmg6&dSxܻܝ<]A}ΩP[ئ0xiALy}> P8VpkywALsǑP _eV/fvZqp$~SnmPtgT^&J=mNGN>Ìzo{:,?\ .H:oPS,!Z.'a{X^u#9ѐFY&tdy(XQݝ4О`ydMd6=! sh$!h!iҚ9ǥ9B4AF"]HKi!-@$L@|vRC pق򙜔s IrZ>XBN$8/^A1p A5/PН~Η'+e+8)z\d Ap̈LHXxqU] gk>3P?g8` ٚΨ3P}xu*!*!`?_nyo-hR,q|q˞=W?@C7 :^kc!ՋZoZ0Q4Zurެi|.{ɒJ]۬~Uu׏ k?n?aVLx{_ ʃ'L.8+89&XkםjF+KkgkUy<:@ A^vnE@$ b<oL2d4Ό? xg<|&և}vgpcc8: E`nͱAÕ@QeJT^DSbCqI(zwW|y89 p#j%A[hI,b+}WX.r種E/zHGIy$VK, VyVH"*ͲZ"6";~`٩8}RZJ)N+ׁ,T {JNF]# ,%5Xݬn]td냪 uҘ ER$_̲C!Y!Xų|vnu ʃ'r^Q9<֛p1p8p> C[!hEъ@R$EC>NpI )ֲ7YOY f`LZTp]\|nh }EI297f,Jo^0^wRGS@WTM*Z>KPUFFOg?WsmyzՐ+oPF(L Ԣ7ooO c6 !U!Ŏp4֜z s(C';[T XS:UpU3j }U O GNHc2^ƃf<'sVIm ) )HCKC< AJ{'@Gi/ť-eH%@ $O tI)@re"uگIY|reK@%d=j;A T#P$5 ;T $KWfQHkEMR?? /|9Үwg!݇\;'л4t)3am6k/ |Y& ze^8)KYr߈L.CK_/s\<PGqC!1~h _0sc Y7ϕ,*?|AXˋ2bRÁW&2tRcpu)@oڪ@9C)r+1?VcN\UPXT.||>%-?s8e) 5A DQD[ҶgF^pmESBA}gMl'K |Pؖ6. =xHK 4`S89O/6s@%@*)mO@TbpuM7Ӂ;Xe!vClVlC;yM4.` 2$HW >MOz$QB@I/9CnHs a(  Ò).E ZW@I;) H \%Q*/d;P^dQ U @mMrZCd6.SAeH#ʂ r ?!0ۅٲHAƱz!['= ֦=Q{~y98_zʴ*ժk/}U &>4(/& YZ6fȋ'VHVaA.􍵿|[?r}>Slkq>fZE?V5ZP oqƂaE'B޹)PaI Nxr p8Nʱ۱ TjGAMV(xh :41aWRNs)SƫKFQ5X/X/X l!{vvH} EN S@1Y w/+Ed?UAP"d 4$%Oq5P,X ֿ5jdi;Z[{]OwGG[.R^+ "w2j3-װ̵P"?Ѹ|ToT ꪺr#{4k`Ue1YEep#tAvfv-p nN:s(HCQq_U;K/K J=./W ;,d=]ve# Gx( I*9OpLYO}q#$71?{rQpq$;%(N$xJyNC MiE㋞)`&AZ[AKci . YGI$ P| bI:H Ht)) N' )Tx tJ6&(;tkk5 k/ͭvw=מc/^5#X&h yu׀\IH-2 <_JUOkU:~A[S??1Rp 'mOĽMo~mq6~6bXM)Bpq$6թт݅1q{|aي% n>wT򮁫9!{(N1bA>K>ř&d"J?!/\!&,lt)p;sW:zL Dp4*SSG[h@' 5u oG~ps/%{AN9nݔ+X%T ~?Wd|(+ g D䦟|†>u rPIHkvM<;ܧPP2}K;3ޝ  "ZpRA!~" ;Ias:nkm-VŅ/҆>/S;@h! + 2OdP_>PBr)XR8%_ $[{T`) Y)!@**{tҬ@ e,ѝ.{Ts g=QV:#qNwAޗwi j4Kg" }}@Uk] j(D gxbq^wZ+=&= qK84BHW$]AڋH{PcHɒ3|8P %J$D6Iy_|r=`ϵ>` Q \P~[ v`fϷꪺjzdzV (P{A9AzS6 fkhP_v=5@@^{0lo Py;Zƺ2F-+z҈/RA2 "A?_sVQ1BAL:U#)C` ߫I뻰lcϖ-iӎ?_jh8*!{J: 2jzCM,1'C !FՇijs#ܳ<_y!kc0d{$(7}נNRZ5:RTe*ws/Mna- rHNk:#)mZ/eΑ2I'@ZH]R*ԻEs[!#]Wb=uӡ\lM qH#2o3rew2<1IDATq ^7Ʉ U^-novoP^ $r6?BIx+HR$AHHKH)#e@H)RWK][b(rRIS%@NK}p, ȧ&A,9dV{ ^Am Rj|TY^c4A]`5rVY`܏ XRMN& R( (=_/0b%%C1c~ZZP7|ӊz^:nh!ܺfX G8!f"7P`mYc3(9r8!|@UΝ6江r@ <*;p q PkX\I=~0 ߚ4̭I#giݯmv"W-/F3 S='pUmy}M@l9 d/JY֛q$sHV $>wxP.RUU /S4NxN:NJ+(7 pRCNp8A+*A*oYz08lύ7$>21U1$M){dH#qG / ^9%^TIT0-a`orId8{6a k v#<{ȋVg3ح'X=Ui?P>VP@ݦW +݀jZ /j@ DM`Nrݿ)|i){SR ]T G%G%-zA֢wo5܂蝻(Gw!DGbĴ]Il"Y,f`N9?{uytp)z8=z}WP['Ym6|^ʁ#NpbպT]䝲I=>lrĐݯ98KnzY5MQ U5sT9*P8@8a)Ёho7 <&p}vj =v`Qzjk[ Z_vjR-r@ Mߐ~$}J}])u}'ڒIsU_uTëC*iE&H{(B,,>E ՋnR",F,`- k-9w<2FWƄF)y(.`; #nak@nj^J{0ګU}$9|(Upwd/n|e| 2 դ@ԗjRqG΂Dڧ9b J{{%@^h& T+U V;f[m!#X*X>Ƃ KR MUVAƪ12Tw ru@VG\w44ٺݺvZ8t ^x߹ DUi((5v/=D>YL)W?הk]v*|b84l3# ]|Ͼ?|LX~FyObyba?VsUׅkV' We2Ne p'{BoO658>S(aPT /yGדLu -V[<Qލ(9(E|f /HyrY[Nim7D6VUH e@E{"E'uw_}1jގ AAWI ԍS,"D۟I4b,nEn{5%UݏE`/fKBPvY>5IMy~U?Z(Ke E*u@3+alQAa6wCP ]tǔĩS4qPrW_*c LӃb #@Iaf.;g]PنOCM!Gbضu*:o/ou1U]Cdh<˙kϒ:,g8Kw\ }+5εsS;VW+w p$P]xNT9g*XaηycobyA }/ʢQ~t޴S_9+P@JH]^*5(RxUtpqq"# >1<1134\3%2 X[=;@e78v9w<%ħo)lWBz2GC>K$u i'T% 'dِ,ZuO\pps~ c34]ndw-#ZG co V`E :ٳN eQRV̳A!r 8{!XúD}o[ jjjZ6 ?*>X *YUwfJTw"=?hU!BmG!j&C=$&0EVfZuZW1dpb;MrW7#32O5N*[mTbk(9ѷ$~[ _굁4z֗{7ο\d!kky^x,e?_GN~Hjgr#λ9ϝQ(*StũWZ% yAF_Q\-O[)Aè Es,a8Dlf7О X(IY%d"Ι#7(GyǽilU t.pAŁ2W׹ "hpEo _w1@). ]y :MV}{nf:6u T/5VuYGm(z* aydGc2mjL(m& *I8C?`AC. b둏 'ZKM};6;Wz^hjx󸠲aЎ!fGo63㚴֑Umi3Y:aCHk )?=F}J֦${ϳ_έVk#[5XWߐ3>eH8WόŪ~XqN5WXu. g?M|Y/7!\UdX4@.Q|J%9d0N)zzp< ɓUp@2.ނ{ cD1"|@}`[-e;WlA<)4 l4ɔŒ (@1a5[j`UWWqxX~(%Zg꫞ a3rAM~c?:trڰӝRz^?B5deiS~pL#!{[:tYs&KGZ}ܐZ?_5p׹칹*5~ñ S=bf[pn{e_-J̎wd 2 4O\ΛYwź^Y.K%H<5 (Z[t"m Q"6c㤣Hk)ds%r'1]5t \ETzG od]Q2}]PpsML9lOXsPk58qX\l| ***9y5j*h0`=. @kP75>#h\K,Aד PA%@S 2A^|Ѿ 8d?jWe緉q`4xسhAUD5Ճ^!Wsf$y[zmkj Տk9[W'WihfuU2ӨZk}}јeC';~~س]?7?` \OV-aްޛ@HiHא S19)p e @<g ~`.d͜侒;LJ#ZBCa'RAuTUw /a@8AG-6}''9p.J.9Q{ }~l}%',wd5<d,NpבD_ /pӠ ܝywq dYƢp |y&_|qB0s1 n靳Ǎ׫ZfX:A@ư؍a5;dcX 4+QfX9< mg Ri3LtR2:2pd2I]fr z 1"Li*Wcb(6ؤNUJM o#t}ߧmh5vBbb?HGOǵƨG%GF΃iN4wy8-w^8+hk7t;`N| aöz烷=Gݛ<ׂZGS:0 TGF rqsdlLF3I|u}oA+Ԇyi[!N~ϼsP4STHli jZDIMҿI~ECAVOV{X#G|Fś2]ǬM(qf$ưEOqKh=I[優r^ ģ![wQKLU^Ew[qT㟿_e1#.mav)C$w}(JP.@CNʤ(+y䖤n1œ^una>HU\_=FIB{K;AOGCطޞ/ p,#1ddL n<;*IAwd{}<4pj &_%0 60ϿNL?`HyFu]ְ+'BeW~<ܷsA*[:Ԑa Eޑ^6q%yI SRMPZܸ=8 w: 2edgUR1:V[[G-zZ_< &9 j n{!7_@Y*^c /*ʨ2@ňw7Ϲz'6Jl|M!.#L(t 3-mmm-]}k釠mv1UC`a5?1AW.y^Scb/2<\2&oWqtϏ+82LL[Pf>:+.:s&]FksLXݮPCCy=p(HSPWJc *MIZfO 92,8*R8lt#LG`Z_- e1C)ԡ$5m2Ju>n5sWUev0U5l`󗤉0qR2rh(RjG3}b4o8~~ܜǜ?TjXO'\91 &I<^ Ft;~js\P]_':v;wCW]nsH dF҈}<"Qbȇ {d!M{謻}UW:r`U'6ʼnd+,^T8||.$?z!<%n Wx\31.<\dy_ޕP@&D=@N)zsֳs OSRa }Anl^Eyl'd>!+Xb4rhO Pj<ZۓY36Xn%f ~"қ?'L5/&V']e^k(z/q[S<0ۦ_ưkƾZkݨ%:3Xm^֚& l6&`[hl?!aNߔLnJ h` 䲉&?n сZkh)=_~!}r ?kFr>x__/049^W?w=um*0~`BϝHb~SBG8־W]Bp~Tvo2vd#JGtƑ|%ogjʽ?.WuʿAojoLmTK G|^Xt3̼c2nl=u*D\Ŗ{/hfD(֫OUU*gUT7ZZV_@ej( ^i.-9,;.k}}+EB3~icC9rA}=j*FPɪz 빓Y@5\g3%8AZ& >]{IshBD~)ض:w#Zimi>7B(0eim]5i8xXZ_tadνt;fmM xgr4&2ۺ;DqF c򾴔TKz'9rڠ sLXUm*6ܐE?jJ$GugJ*jm*Snr#@*GA߂r~~)P,妴{hѪ'1{Y+"/V|,⻈39=r'Sӝs>B;`ǃ]_o^99sBcym!yF3!c.O@W a, W| du0_2mK gcs .4dBL] jxMKh6!kHqZtwbzaB V:Ij2Tf;uHM_3BU=zЍ @'sc 9 s Ҕ8zCM$ ݶIjH$4S@VttGiA?{4;qb&S vd?:>-]/+]lj;nzܛ:5eIJa~j8j6=rdo?|3 /2BaH^z^#nR NОO BUVwnrsD`5)QHq;I5[CxH_0GG Ȱ3˰DW]ӷZg틂em?lql}BC}w8mx,c g6$!VL A=MarqJZeT'iG#&0U?fo t 1jҍn!`ny DPI 靷}H'^Z5@._8#*5<~Nㆹ^6:BGDZLVw1$rf\.4 :WN\>1M?!DC RȀS{UP-$|]r\7؅^N_*/6L$H6i]ҿHݘ:ˇ"vFDKVjm䪨1?6ڹYaiue]QiJURp =a(5 ,Dt?$RKjE)}e~@\-#ut!i/Rl;ӚaU^WRdi +H5ǀsQWn~X}=*X_ML'??Ofg h+!hZh_xN3S7ś@AϼM2;CkBJz$Ehfn 64X 7mNh= ;Mr9dA6埉I:}6|qq9vH̄6و>1&iޔJ}%+Gp#w}PlM+e{]#qcX*jl_J*=D}kEKWМkbkkaOâgjH? IR:o!tgj#սG}W rgznX٧7As}9蚇{no|ir _M HR*)g}A/.~q1&'/oe> gkjWP3"wWjg Ph. UI÷o pS$%u2>Ɛ|CfƦzH?Jy;7`>(G-NT a(,.Rbnء)o1D.4Vʰ?1|f$LYZK>L "3PteXXC$v\sZa"ESm˅FDZbZ1˸Cؐej>UZ! \4i[)R 8K<[ _D, ЦDWk* Ӊ,q[ӸK \@>`z' Ǐq8|!{~ǰ4I:k$PՔI&d޿uD Gkm1 at%Ɓ8t18 Uxï΢s?Q g19%N{GB_!E?סϬ+ vaݿt \ahQ`;o?[1M2R Mp\P@6D *i!$k($1T:9e!?_4s~񣫚 _;9_}FZkGpmΧ#ÁK޿J*_:ogUO4t_zC@WKc |6V/y)]0aiuhD2ZS{Yt4o׬X_аZ)|ः7=]XSĖ?KCPTH)x;@b;w=uiPN73ߏqP_d2p,$d[ &,iGV[U2@:pGtu-JюvRziL1!y]v٫41&},9N59ՄhW? Aഁ3Vt=S8צuPHh$3M2Cp P93CSa IȦ$om]هNm :M٥4f.ЎQLFCT&#;Wkmr?f9O#}|^2X\;EzpBNm"v`NN 'WMoԾQ1<ʥА2vO(wxo}$I&8K.`\D F5="35nt54F7fMmdtg4W$?}j*:G 2Idi aj^Gf$édS=,b fJ-ZRNi[xUWA-zA {~KWD=**!}ܲyAWw&YY }\ }1*E %1_W%ڈqiL5ٱKzf0$MKoߊ07f)4ܠR Q~d/U꒵ֿ}_?Z̝e\a}灍|w:AB_q溊Lg+P(EghJG75ٗ `qMdbI_sۚdf.CUK Ŀt\vƢo~Y.e,(*rY.e,f.e,T.;rY.e\#Z䧵1aN_+(\{Y?1u6$.\b r\;DL=Te%BOSP 1p+/˿GDWDsKcApS)`Cm6tOnre,CrMx@~cdjZ555MMl2YPWX"E4˜<.z~,1=q8p,ip1ZF!$ p&7@I_Z2Z*.G =pa[?4J#;; υql >PX.J+ G1ӹؚg z[j2MhUbρ;;\T"m6ߝ71߅Ƞd Q_=~9,>;8K-(&]Z>T)̊ʊ+6,6 9,UqqMk@ލlo쏲?YdaY3 `{YtK2)z[}^SN1ۮ 91 cZ f6CчS@3_e@ :D 8?e,CDܬ% `B7rҤc2 Һp$,c8Auʪ2xV7>=>*߽E 45Prcsln͗2J* ыsZi m:'Uam9Wkk3Q')^[\A(qy{ٴ|ˉ8/w=97}L;X %8TIMȊbd` RK-бt să{~|.h^f o1V?0^jx#Rl׻n/*X>vM= {bb{{ ypn[6$P_\ }vz;pq/ B۞x={+jݦ^8>uxvѺkMB[@Yۏ_;Fo YCc}fOo'%Aج,pFUGUuؙ0j$/puj c BՁjrR tj `OiO) v>NvXr(y4Am֚hvwT c!qM[Rys2ʀ H,P] T7"UcN9 l1-h.6  W5`qKhxJo 9w=vp<}r½g@#dlkt6^'%͇\{O=^ᥟ h~ر52 5k9:2$١)6+@mϻ @Gv%#^r 3#YZmyݞpGHF3+w*8@%@G@AAAAo.ƯIENDB`pommed-1.1/gpomme/themes/Tango/click.wav0000664000175000017500000000445410546031402017623 0ustar julienjulienRIFF$ WAVEfmt +"Vdata   ><Vm c{u F k!) bQ*=; G% <yE E$^)xIfHZm;"JQr3_cH 5-9GS-k;F}}s^-55v^Pv}o3BP(crEk5Oz\1NK$`Mi5* L6haOH ljul 39l!gB/a(-b0U#-bdU00s  pommed-1.1/gpomme/themes/Tango/background.png0000664000175000017500000000274510547752613020664 0ustar julienjulienPNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<bIDATx1oYsA D Ѡ H@ 3dɆ@{7yq澞x9scGIlCs6mONVv[sOcJvx?4!_Y$o~vJb,kKX-~_ֵ}r]H.^zG/>dYIw=DN=_ZdYp%f}σ=&>&@',?9d%CGpC (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b (&PL@1b$}vtS{qIr)8sN7I>{ `/>o{ `/N6sίI{`9~Qt9Ic-Y9iؙ뚿p+$3#߲$?`ιMv;v]I0МS㝏]zp.d]\8'Y%cy^cWI^P;'w @1&y-ܝoY.}F @1H<܅m{zx* c&y(Nܺ/Y?~:(vQ image/svg+xml Media CD-ROM Jakub Steiner http://jimmac.musichall.cz cdrom media removable cd audio pommed-1.1/gpomme/themes/Tango/src/volume.svg0000664000175000017500000007115410547754030020651 0ustar julienjulien image/svg+xml Volume - High Jakub Steiner Lapo Calamandrei http://www.tango-project.org pommed-1.1/gpomme/themes/Tango/src/kbdlight.svg0000664000175000017500000012744210547754030021134 0ustar julienjulien image/svg+xml Input - Keyboard Jakub Steiner input keyboard keys peripheral HID http://jimmac.musichall.cz/ pommed-1.1/gpomme/themes/Tango/src/brightness.svg0000664000175000017500000005702110547754030021507 0ustar julienjulien image/svg+xml Video Display Jakub Steiner video display monitor LCD CRT http://jimmac.musichall.cz/ pommed-1.1/gpomme/themes/Tango/src/mute.svg0000664000175000017500000011575410547754030020321 0ustar julienjulien image/svg+xml Volume - Muted Jakub Steiner Lapo Calamandrei http://www.tango-project.org volume sound level none mute muted pommed-1.1/gpomme/themes/Tango/src/noaudio.svg0000664000175000017500000011575410547754030021005 0ustar julienjulien image/svg+xml Volume - Muted Jakub Steiner Lapo Calamandrei http://www.tango-project.org volume sound level none mute muted pommed-1.1/gpomme/themes/Tango/src/background.svg0000664000175000017500000000403510547752613021460 0ustar julienjulien image/svg+xml pommed-1.1/gpomme/themes/Tango/cdrom.png0000664000175000017500000037176110546031402017641 0ustar julienjulienPNG  IHDRLDbKGD pHYs oy vpAgtIDATxgU.zjnrET1YA  f%(`Č( F (欏9g(9uau{]gZ}_W33tQ5ꮻCP:ԡuCP:ԡuCP:ԡuCP:ԡuCP:ԡuCP:ԡuCP:ԡuCP:ԡuCP:ԡuCP:ԡuCw:A 4h٧{ZqSy_j{ꫯ)S8m}~߷s|oym{Zkr@7Yq^zU 3̨^.c;4L%o4Ώ9[&6=\s͝G.%di[k#   W-Z\ҝf4{٥?*~ThAz뇿]su[p|TRJ+.TzR7mͶ-+?nꁵoYSVFaPPqC,XJ1*U(l-[`IljU1A B hzJR*kAPTcs5QOi4H_[o~3Vc_NG|dž&dҔSO?+f~Y^go[^wuE'RK-}mV[־A]r?+)BF >\a]]b&Aκa;wV5<><z0^t"9&{ۘۓ=!RY<FμO 姾k z5Fzח۵lٲe˖ߑyp|z۟m?+@nǕ+&e#8%%EXQڶmֱUe16.v"AHb,!;퍒)=ٛjf2!̯5żl[4v0^7qLԃ5v ɕp{ZAC,RUjr&ړ!Oc<_Bb%r9cw-tt,?}?TiO) l%4z8-zG7Eh _,Fh WTSNU\sp޿p p{79:qŖWlyŖLqڍn[,nدsMΫ#ZFh*t߶Zm+jT5.GGWoV Ɗ!6ҔU8,#,"aZQ@q$]+w܃+܂*TD3,V6(X9wmGG>ѝע=![ْjvlJk)Nͅ5\@ysyTQկK[pT}^ukBJW׬T }q NO܏]={&7v0Jkv򾵼d_\lEM5Xct}&?w96/.lSئ/|$smp.ߍ:PuCv%">q^jl7ٌw*xF/4y<&ciSD& 6hJ 5hAGQ~𔆟RkʗGEg*'SIS\xcF4>%%^Ҟ8F8$QMԔMb+R5QԬ^zT=]5iVP5ŗ-^we,`᪋.`) w]؛%W,j,cng-󶜷żpG>Bͺ5֬Yf(:/oQv>͍|Lc rf>f3h%b[8<,'YO.fZiͧ5aS;O_<f=skSnUǪNCnكfnsԨYS;{-lf'^<M5:u?).>/>[.r///ovUjK5nՖƹrzC . XbnLͭJS|>(DH_jg_+6Laž=DM0:%$_|BUW}΂n-Om~jS?wgFX2c `ڂiXC7=6J9*3~mVbGTܦ[ު UϫW=ov.oE/ZM1ZvsB*P1g ;hR(Ć14f7;6vv۝E[պ;U,WV|S rA. ~⺸1C=/Gi]^^t/^X}1}T曚j>ՏusJz{;4&/Ʀq֎nq4LG7<yaJ{Xn5ѳFN):V-៎{qjN&zG荍mfc.s|qvu.#jUĨ{!g+tP:꯫KScjRx[6 v+B'7V~B¦ū5\88|IED^:b8%ޫVJeM67]ε7eʕSr%/~>̻dyCS3XJ*,{ײ6*AQA4hE.+B;׾߃3F}oy\{n90L7o:L/^X(Qxݶ5ڊقf5`սW{ծʿ 4oӼ *m6zNt:=([R=,%}X:oKQfMǚ5)M,M,Mr?>qOǶ1w7m-qa"jN5x Ί˩z)q t+gx';X)EuϾq@RWVpvaɞK\'3~_w;k{3}FMxMJlNW%SLuVs;⦗%}cys/c(oeۃo׍'XbcyNZ?w>0^^EbFqBʅ/iuFZְX*{}׷{NwڸF>^azTK=yOCGƑ-tߥ.ݗ'/8u8YUo113cwK~ZՍU7"glO~7gx?qG'9G'M'{E}B[ $#[s|'T1p9<'{#ү9C8A'x<)a{'d!!薕3yDā`J7f~|Eo/Xf>yx/0a8#F9?F͜DM5 *Ueb̥RUզUP:iJwn)݂}}qqc7v^?ݧ" QQ4G8‘1Z13fMb};S,O6UXUcWYoiޠy mcX*yJEd약X͒mlÒK/EK.慚k^9iu&k1_O:es\WDNFDP*Sc?&Zuʃs&yfTϲm#G3;uݠv5tf|k-_XY,Vu&֎cmeIj.R/Yd߾ŷSU~U=JK+Zc$^6^$E'~_ywd5WVa&qs\CCxm'. 7<'NS\ ]qiKq6'pS݀*BS5!uq-(8=Ίpk\18SQ#Srf]k6]vqs7y97OD@)nVܬٿy-%k?,(ׄ>tQL;)K+r/ғG-=zRt>WSZ(u))@,>򖷈wݎjio} -K{(Sp?.݊;XmTwob'-qя|w~!d's:l갩בf\HPK )#zՍUXEK˿iዯ<ൟ7w9X?¥.t {Nsn7)g嬜}'yJodX˕P # |9_Wo<#ObPZ铏|&};d>yFgMuk^[[(_sdҏ\`r)uB5AUTm@5GNcLjbr^` kPrʁGq.ua=h>p݆{Sh8qD6)|''bf͚5k巃~ wEPĠ0*V\a=}U7,lиxYq5إ8B/zrZcM6Ǻmm 47 =YߙX'[[@&CF7UrF*rm9S=ҡ.': K \q*/Ɖz׍k_%<)ݳ{Y䄜#rɸ%ۗr~焜Ѓ%p[ oɃr$tI)'Ta*Qyk^PܿmqbP *s<ݪYY%kA},Rm98/iiKB,=t|44E5'eWߩ/T}5ە/{%Zٓhѯٶ6Mi6yqXnr,7㰨`, cN,cvgpˇ1*FŨj999XVUZTղeUs?v!nTSܮ*άx;kORܥY*WٓMmzYyەm-yA^@l6ƖX|_).ǜs&ϙL;WwyK]RrBN0;>'9#@9@r|NЧ>$˫=ܜ 'Gf| yHHoFFJU(6wK-.9qjp]]ȯJ9:}rh|2rG]m< cd.0Ms8'X3TO}T慵=t|m¸/z1X;#^L3a 5roX`qyz/s- r4KJV)O9樚Ƚr _s[|CN-*{TQ%.pɄJ:{hjJW|5hn|cn*^h ɩ4xAExZǓ;F6}ibH!x>NޞUjaªqq__>!]ʻ3<׻MyS9`䄼r|8"usot[FUˍTYAr@mp5>D'ߑY9ar@N)7R9c|m] _}[lNL|c}rK' ڗx^O;[__+7^Mok IyBN§O;7jyPadwE&DggM䵹{^;;O~~I$r@Wy<:6Oy*&N [peS\Ro}j^5.ypFJ>2M7R.`z"4N\a͡kણ慚j^m˵\w+15ҶAzms޹=7XoSGQަ}|PS7G'V;~򩪱UW=ܯYUWޤA]D:?߮\jQUqqQW4iФy[t:y|oUUVr%F~C>vX涟~n{J#J#J#wkX>汿~ԲVn6#jS Ąinq[ȳ<7ypăYi4y|RTL6sy3'Cu y&x,/!ʱ;AMCps/1Jvw0-cqx3޼<<ȶ8y 9$/ pc-gd.ȑ8!pyHn1OylgY=*+?t(N\NqqGZ&@|]tW {IͰkQ=zNlr`~Ziej[9_iJWz7z{t[\Motn Sl]UE\v˝l?qyucϺصصصiA6w]1 =mnv~.\C_[W|cYog/^RhHhGZnr:ΟBBB}ʼ2Kr1K_ձ[R npM|q?wQ6QN2ޏ/qsC=a8[|J[rlO@! и5x^6#^mhkc';ۉb pQ*2MƅP_o+#/ݸ3fb__Ɲ(1FU54,jgeŠ V%zDw>3<,6MbVnV"znTR1b mnhsEhL->Gg<1K?]rq_G7 OU0̰MWbL)DqvaK/KQ; ?xT_u~ U5#vo|C(|cm+6ڬf6%\en[ݶcA:bUͪU5c3/<ǓMܑwZ׹)ϛpfީ?f ^T'M2rLn ipuj^s< ;s.S9e֓SudZyR#&f'ϑe}ݔ ٭̒W,ʇag+|?zxΫ!мs=}kޏw]9D_G_҄gDl;^3OJ<"92-)X\j<5\O}7^-imފlOaӱ6iԍϠm.w˱ m}k Y2df:2oyۍ-J[G?Q(~c<j.KƘycLƠ{~~Ez(ays~7cb66\ cD] {|K9A7lv{VRR䜡Ç:F߶';`c&!Đ⎹zk^?g蛥FFF;lacv-ffj#ur2","]d>In&RS#/%"zӲH!ă1>ĕĥ8 ;cG0pM8Q"QQr#kEf}4٘}J6mĩqj/74 TNZ9#leq=TLL$zp}KkC^k?U"b/e[=Vq܍}U+XYv;EwQrQ>sy2+i1qt`/ GEQ]J,(<c1VtF<ijVV~V+WZSʐW.|e3~&SRZ/w 5'{OSBt嵦uПи?Y~5)_'M+URa>(|$Vzu+64iZӴ2?uϻrޕd5ss dA1,K8'qs4~_QX /sq96Jm*yɇv&88ˋL2잇fwLΝL&C>yY^EHϯ=:L'iD}bea= bF =_游Hx3Īd|, 3y/"98/:yA~Jr?ɛ|"'CsCogCKpJVqf5~woy7z׻Z ;Wrsc"/c~br/b^Վ|'t4&ﶩ7+K^Hޒq\O~!;C^t+ F-)_Fy#atWǐ=e1xNyڐPU;iϢn- ',릛r;8&{kh-3G=0drGXVJok8)Nl.7 ~_=9s5yC^LOH7RڵlQ^^ՙ+XX+X9uGQy_|Q5Jvl79'+hƴի\?8+5v.RI<vgكhyp˃[KXz3t//wfk2AnIUUw]*V(6;7ީ.tyj,.e# E}.phG>tt<uם]16濍mlC7 qw.v b DYmsY>` 2<ˣ({U ,d7< LyFvįy{9<ͥ>FcJM'Us4#]9S: )쑣paΙFc-+My )+( 6+y~7s]Br8߸UsHvH+iM~Qg=K[O_̫Ug]=.pf9fn'' 9ѲA34oiK[ZvAɯsB~cc8^"_>)w0o?;턯}ӭʏow^ײz9KYzm_ 9tȡC000aݴ oiкx)N8 zYo_ iwMk,Z+ʢŋ/ZWԥԥw]qE\;N5ؿ:G#-sSmns+DKG*J&}yFʴ2.onĻxN(0k0de+Y67O34(7&xғd\9-rc?ŷ9!h ;1?χȕrHK>Cޒ-¬BMV:fxsscyMxL,œXoVo8FOqr-\:tȉ?}յCg+EkmECquZW} Y}(S8pp>T:-\ڒy{f3cv̦ФФЄ#!Ɣjͣ9L<}d].X+q[n\9T$NW.]E@`8&ZX &zDnlc<1qMV vj29ZuV+|kZ6scld4G^i:xssIvo;H^zv*1sNlW ]Al@;7kZ|,Gdܞơ9!ݺ 5>Xd A>`Mi3!y,rp-ky"B'hO.uKțs1Fᵘ[xUW+Wrw:q'nvnBғq~ZC@F+{/''7ѽWaWQkjM3򭜁o?q{0\s^r<U_Rg8õX`AW{x-'ՎoW][5n[~d?JJ}K,5'L;VnO:w6tP{)\3pRlZ&v] K>!ytȣ9缞QoDọRZQѡb=_D+]V6a63Ϩ?2͘c2UsTarsU{VYl:ARn(.r 1[=8 N@ . +USS9%2bx ;`#Z,oUo+랉ϰ6,?+Zh qy\WqAgl]hAx93pVEלVVv"\…w qfp_pkW6C,8^%U\KD}Ut#fmjҏh=ڱ aao |ox97^t[1^P$Q?nB'u#Ύqۢqz8Łið%v cLBw;^OX/Ewk;Y3+"*TR!6:bxPC:bf\9mXbY+:Y8:z[8/$V';m;71o`umpZDw-F4FKk=nOZ68H:tU8:zƅ*׼zBmdi7iI?*_@'*]PcqGiSJMshѦ7-V,#GTr-;93$@^yFn#|}nsո)fcg q>pfE5<|쯉E^4lu&+M<7}ySxAc|U0#|-[/N.̙y 935Rz%QD-6 Ӳ'WqK/pR{Pct #H^kavQ=ew%<1OԴԴ_+^؞gX[zf؞w7r cSE zKߚq+KWsW<,Vˆ^62*FUհM!  (P\[-ݲm,wrw.w'v]q3i͂* kVɞZH c2ǚ0:$oq\mZ 6Ø'$\5BҪNGÜ:~V<\k. k9DPoyz5Q9ԡ86eY薝tsnw۔ j&$bk^܋G]QQS;x~ Ÿ6_WK?~,JY&SM˩XgթN]u*뭹:KU4pE׸h[4?b֡X?bNċNcؿ*?Nk?k?bʄ)L䦓N>47]n?>|„5*'8*ś OqV)Mo=sܓ%;h JSKSKS-SrNs6Ky8%˝]uՕr9ytGAΩ&(rZ~]r܅<(΃p\J[z.UzZ<319ԙY'N;Ix8`<~0Ǎf*z47cCi͵шXbiGiy{a2.&zG`Vq]= g})M cwbD?%7>qa/G;Ț=OOc݊;y-$&1yλpޅ /<6yf\C>wZzjNq $oɡ9)y'ߖ;taQr\Mrf6ͮ6-o<+ WQ9"84K3 y(v/G'-)ݞY5Oʁo9ӷ*G?z|-1PzlJ5*(M|N]$ۘb]?gx:fZhX} P>F>F9|2O0ƣҳ`k[ kRK,R>yG@9KZܢOd29/ x#?a}c) |&# #W2o7roxòWՐ7Ay75ʒ's_2ǿ9|iX;l(QWz)ܑEδ>A4] MW`'6xhvvӮΥK\S[YsGO27""٭|nkt`JW} 윿kݼml7rSPH#XǮ7&;6ٱɎʣU-M.M.MfAꧪS2² Le1Οq/͞e?>bcmC;)nx$6MqCL%ubtU|K+9}K7iC{⸼__2![q i,1>*y<6źjQ y7ʳu&9ۓ':Y3:Y6A/>OV\n+.z۬z;S\T^CNсm7̓:[uN[,by' 2x):Ay91'泛v<ܣM\7hZQ_&]tabizW~_,Y4g/Ƌ$꥗^I:,9~f\r<CDcGcEƋxFa|RاpPab26%O1n]P6tL@#GcJ;} U"X mb;1A+X-!_]yE# ,@EoC1ٶWsl&s#jo+FP9OdWB \ڎn89!U0%!Gmloq>A|T0b|&!;z?snrF6mVܘ(9YsČA1(ItXk?9Uoչ}ZE7սWo1wzZL }-دد8ǽv1wsy~cinɉCI>/rg ?}_SZl%qߓGxγ.w91~ < 5װ(+5[DC]ȿ|/Iy%PC2ChLB}/q`ᆫ2yy͟73ҁ^iˌM4Ѥ 'RO/|H)7s_'I="#Jrfd|br6ODž y֞]#ŋo?Kt&w3Dhg0t`|.:h`+ h |CM's"y}ޖc<mK?62/XhAl;+c=kōykLӐbO@kӯ"D5<0iEGptuys~N^1\7 K-D K\7Xh4b'#ijڨ&OX/M-O-Mt{mUUVTscM4;?dݾ]/jq-.>0*:ZSyi*T(qVC4E,j?ݶߔv[1ĚzZiʏ+d <ͫi;жC1$ubXZkQղeUKruo^W셃58C 4@b;&ĐoQE1D Y $1Æִ!79|c7`8.Cv$%[< o ܩ1S".|'HcL'݅y9<4Teog_Ce>\^q?O;蠽4?Ku?~-dCV1H#=Nl[VdEVduk{z~Zid)[f k֦[]Cqfqh5 [8@+WYla]G DCꩧNN-50.v9˥2uLm0b%Y栭֚[=qoKܥ:{C hUwX:Sb<qGWxScrR{)',Dx4c|g˦zѾNljubOոGhȃVyb^)y1y0d$|Ad\lr& C®B9qSKl(犨¾Cm+>MJΈ^5Sxf+c;9{y0B/!u?Q7׍vkwfImͻ5;R]ƚ}iSPW^^3fOQ7J+֥ry򞔿Ay y:'jE6Wr+yzO:C>y9d<|vx2v&yNj,;:4!)aPv=5'{\?EjW7"Wr0%wo8O1bdlpT\?Te@H kk=lwT6{l,-[;14|,O7-x:tW5sj̡f=j˺/뾤ܦܺbelQYYړמdTif9 oɮot46iiH^i'  LKk+ m wxjsYXIw|='Z(/TPa;Qθ3l O~?5ޗ"c1_S6 9茇Acc>L&UocrHl;6NElCOGj5cϸ/{k/dWSrOag"cs-&!wɭ ߷Jr˜/tb:^aq b~)_U^?֯Emjd-|Œ7^dѦ,xe_]v%,ꕪͩ_5;ިZCM_>\0},G枚wiNu+ E6x1sqcH8>1.]dYX]\_ڟj_M~ԷoW߲#KGD\^by,g<ڍk78̢֙ؼC o3C\d}GlG\qGwW `^{iH0CAQ6x_qqO\cufW:~Smml|#Uvrd%+QZZ};g` 8вlG}<ۿ@8 Vo0z롷e1~cQ,}B} B븫ЙZH!zВ5'RWY׾vǗ~_҅GwT8ywY n֟,壔,۔؋<0?*ߕO+Dn;ÔN/RW{R{yPuYgm>bA,l. -:+k.AȳsA^@\Y܄yhaxYlWn;[88TCϭ,&w9ѡd :Mp:yu*awW jl|K؆@ޓL-9 _bJ 9- JVi(B*L>|Ez*T[[`VyL~.oՐYtqCUWUpR$'O̒KF,Aݍu7H}4Pj-׉lt8kJ1DU^A*?(ͮo[>ڗjZB'?CAKjvjIԾS)ˋC1GDK=R>l6xOY'6G;<[Abߒmsgo1_'{|r\W8Uw$70Lȫ];%ְW ,b| єM/!mA.%Wy&W9&Yt2y9's)7+Q>E5kSjMn>uVἔ'0=tJ~)B.̅2?P^~e{]ir|+j8M3ϿHf럿~_=/zm g:օcgV|V.vٴ˦AؗBsTQ,鳤OMʻw)b3GQ>-,{ n ĂX@1'(no17~#vbGbq,- x0qt5 ;HTggEGM0|)Y_s_DAYdm<0ۛCn؛FzRz+{v\;E-n(_8p ,WՒMi} J뗷+B;dqn`mlfK5q]aOah8bNׅkH#y\mBc75Jd|M? _x΃gB3qxl$fOl=mUN9T>O~J*ך?jϥjPSXr~|J JJmnc8/чm}u%*НN06Pi_|IM'9-'[Y#Xр"m!}]*s]n&7V+PnP*<+O˓p݆mG~_Nֵ6x1>z_Gswk^ן[j_;KF]K.%?&YuSî5ǖ%-E7["1C!KJKrpG9۲*ϭ2s|B:JTD[Pب"B[K,K[t:lʉ+'^VW﫷}_35Ο~3b84W4[`z.y\ضbۊmc<뵯׾N]uMh|@Cfv:#99'd80ysx;&g嬜ZMln,&?r2qb%Y9khgUts#Q8>yiEmQ<rP4sn@bexX"_V+OS> ñ]#N.γb7=78;grw\돪?kf>Gu%7! }qmqqfduA/ zJIq2PhI3UQCIm@O9Ц>nWV̧p^!+kMUK5qb'c{ ,ImŊ樎U5KdMKy{j:"]UXq Mvmry/V8, V`h:! ^O2#_ƺqWL|`[b:;HrA<3c^y### o .EYySF\1qa,jPM P+rH^\<`y{W P yT ;΍F Qj5}.Y>|&O?@^{A[v֘50ǹk8"S({wzU,g9˽w׫m3e%TC _9hlOqN9?ew-[ڧj"?]!qe/@A9A Fi|CW_Q;YGEĉ9'qLr-BIB|Ś-&`5A!oQƁ}Mw}/lsȞ"qїȑF<>ǢO #t>=Wrġ;mt/l:&Z!G`x%>'qZJyCzɔڅ OY8hs<eo 1tPwɓl؞$f˺P\gӴiӦڲzիWQB +;Wkt.]:;iF=K>ScjL%JQҿjW1+f,bJL)Q(b.&Nx1fak8d8E}@:bZ'8xbў8vʱZ\Ct6x˟JM04')kv'Et&Y橚Xx©zʒK|fr[YvE]#V-}d 7rHCSrOS{aSͳX-wҞx6%18n}!fFG8(>ysG>$y'L$Wc0lBf6G-n$-Pye+$.Tj] 8ݼS(Sڶ܋5kӖ"˔?s Wڹo>E}_ǰdFK֡uD~rFN'e wFS!;qTNs6yQvɇal+bj"B|7% hW#<(w0ZA^h&e'S\XjCҩSo%[7f68j(Ga&cFE+'J[FaH-da%Ed9kXR^ryejSYWxkt]Jߺ&7ŘWS9viD`bf1=3w#+\+*{ 򂼀š5 kvL -ԆeSajh}yMsݟ>#[l1y9:GgJ˗/-ksrLɖE9m x>wƝLLzk]QN3vwTƧqE\x"ir`i'a{al&+%S80F-6>Kq18ASXTE=>#^"DUl;8̍c8 yX GP9;Qa'!=Ob~QTާz`K*)kqx>d'8/d\!Urf^y)9ŏZʇƐ;F)12y#Z V!q<^.y=:. M9od'd\'r'U<%;g'g\ud\lم׋Pqsqj/qJ_yErygkPq@Gy8 у@FMk7f5RnZX\tݬ$Fdz LI%99wWɋ2}O΂73S3tm6@bʟycv5<sjwb McVRR| KKZ/iIwڳQ^jk\Rȓ]c<48s<2 u<򱜚SÝA8]4Uȥ6h@*S~~} svymk{wb=//,t0:<0̃;;miN3KW.A;;<<utժaϸ/W݇ڶNt{߶?я.omھx . ,_reQ^W-T>ZSrjN!>?Z-co42U/;.8Tcל2a9Ӌ8T|2hi.CF?L`HO|hEtQ0\r~tG3kaq^cnLrXAw|ʊԽTOTxp{Z߾~$~5[xru>Ӊ8eU^JܛLJx6N4X}lb/t!x|%^bީ PBbWkC_cuI+v#c13O4 ɜlk*w!fڟѕ79Ub9m)6ky1%&8?=b+k`5ƆۆzlY$ hn7'P~f΢믡y]YeGEaŖ 1<.*Kr;8s)amK3t7dm(B}4(X^.rK)_M'= q?cE|mQC_f5k+7CpP 9YJ-Xrs통tXҾf_0(ORr'EL5FeWYg=k<]ԑ哐:#ڐj'=P8UWwWϣZPڇ0_i5|y Y[G|sx# r;Iͻrx#G}|vnm(q"jֽϟ~/F"qq kj=VZb>gi2Wȧܹܹ͎6Yj诿q[:"j,˜ 6}1&16 Ƌ>Z4z7d=qvƒp?^ 3 -cl<a)vEɕX? uxPP^ 'nfbbSMbL^*cƣQ#{-8Xǘz;C5խ@՗TDy`ҙj=FCQp{tmMʧ:C˵uyY.-@>ղ2{<&Wqnj˽t|Q'5/k 1'Mtt=A-=D-pEE~D읫Hnƕz^і|M. =kyw4}7HdWx+DulIe7P_hG i Y_-bʧnOqAUyw5akȟ(ud4OOJc/)mE'5o@:q?4q}܈Mx<ŏz/N% O9r"j y@^* yu4~Rivy,+.yfI ֨ڽ'W}R{yXV 9hߠyAs_*3|:DG};IY;7-5 O{9dF]Eg1(Gux)xV9fؑ<\C`{$.?|{.(N-E|&gd&TְO+/^e*ήxV 78_R ])5|tiK[\$ʵ*" ?#G\K~^;*9KCbOr}qw ~:):bIKLv(stGih{jFQsMOkzRӏ)]X'l`k]Tl8DjIvއwb˓ M' jޢtZآphLKb8kLb,7y6G72+u&YAȫx fmڊOro܆_Бҷo-K\"Fڼzx=b.#/⋶Y6ު? .w*+W\r5MMM~bX/֣|{V?%~_ hYiLApco:&1C-b(Şܘsi4! z7Y&n1g<&4DX 6ԫ0kmk q19⸘ i]8#q3}cJ\dη[#ch qbL""RRZTIKNRvt,N,!>)hMtG<X-%Y. w5O]X>$vʧ0;sxɧOL(wX՜\\#rR{eoC)L,lM C+^C*n+_J]㈮1p|#ɝʷLrW<ʣwGs+KanazE _Y)y8K!NSE~X<ڐ{k5yvyN8?ˎgMaWw+[M-JQ{\wPjU^55 qI6ƚyV%[ͦ~dͩjX|}U۪+{tki$~bTVh=i$eG<1ry%LGxUv y;T㱆a,_Ț\h%3s5ףZ0'}7!PpuXɖVh&!v!Oiܭ?r\]潚jދ[vݲ.ķ.At}唥I?\saOkvͮ䎹c~6{5N!7\:NwQ(Jv4 Qz\9.w_&nv#zGM\E-p0Zj7,M4mbx|Otc p1@'Sqi7owG u٘bZQ3ʻaW˻3#ԇmu8|]82Q,5&`%c&_JTņ PyIe4ɯMM7mKӋ|KӃT&5ٚo:5m(ovHN8%ͯhMJMm:œg//@M7BG|;+4F?bn PB>A^SnfS$͛ȝ| Wr|>Kr3y rlR?Ԏݺvy>%w#F_Į<T%ŽBؚŵur{NȦ49Oф-Wd'qG<'{E$03%y_;pEN1#Xo&`}g_<Or_g9!јC聇0R!v"/VO+.R8%o]F!UɊWXq>5 kVн=`,}i?fCOXo&jN98*Zk?ijkZ؞9]ҥ ԮSNynkyskկU}"o⛿wv]\סni $݉ q5q|Nng;}%q1ѓ1`ŗXU 1%b~b^|i Q64]bD\ě-1(FjH2 >>Rs1;NuRLę671q%I\@榨 Zꯩ۰~|D__ul=sęO) Foyo\DlW䆸*~f1/oE[ 5sKw/qM-ăm⅕kZQٵrTVp9RPܪS,Я>vлGоta&{gX {B(t)BSqITܿ5זLNk-hzw(\0_dc |dsGG97vAhWc}8XBMu6O*؀iHLFSoPwGݓu=lZrc[]rtDU5Nb -꯫kϥ*.3|% Y/9<>{*ɝ|\9[9<=yefflalùt2˳=]/o}|,1h?GSS\|0!y1{Nj9N˳p2[դ0!t]")X^{XԫɏMKi߿Q^{˘ifB!YhJ'9I+Xs7~u?(QZͶiMm{g3mލf?Q|xX1:|m4|v)Q~OPZPZPZ`YXStnэrq@Xcf[^ӸL^`bB 1q.3qJp@D? @-=ˍ1n!OɽgmjylG~A|fGȸtKزb&ۦ4ߚO g*͢Q)S omL|beb:fa/bfD-N1(6˜a&9XrZ 1VOU5 ~)O=֢9-ĥˑԾVa1ͩ߫ C^P~VĔ/+n nZ;1ƻ֊<(6!Jq?!?+8F ~~ظgE>ky>aģq~={!cL_vhռcw{m^<uN|3-gy$GCm}4T:ܴ|'ӳ2+ˢzjݪ^t~Σ;d5,<;P\z6d۷}۷))Xn-Q\\K.T'qhySw[C;yoF7[[o߲~-1TSM-Y:_Fjɽrl@<`,-B; I8(GC>YF_T:LOc [ğnQNB{j(7xB3YibŠĽ"T[ؒaGU|D0p4.ua(N8bEqC)/Y֯Iyy ZiUvyU0'^6۩84NZƱa?B{;gx"}ibi OyWPܱk'Gl=p{L7!'W{>'i03qj+`P C|NK\J:͇P'涠tH+Pwvpvr@đu?ȦƑZlOLUlDnv‘6ȃխd9Eƥ/gPB?keѳ.\ԏq'h>?KM[^r*Vt-QDd&1'k1"~289;pG<,⁘}Q2(U!ދ516"go8ߦSjXk<`$;ؑ#ؐ*v-ލs"&y1#C+؛ؽģAL@Dƍ8ZCnmQUp'['B*YfMʬk=o+F]r-a/?W/s2ХMR6|QF]_,-\~ 4|,96XF8BP.[VqWwa=Yys㈃8ȲQҥғAN) ##-rZGe/&%6фܫ1r~bb %yyGը%qw5<;_zbId]r^UlEqSC5}CuGgm}fiqDδ2y#2# ɾ0Z9A ~rn-CX' vȎqlsb0 zA.)>(q *bt'{wԎ{~.~bqo;/٫ r\)%.KvX.Mt [6TY/3 ?5"Foy=y\HSn_r6jvv^ޅmՓxO8(k %蕷aI̍P̛⦆z=q yCޙwX3N sQVԜf;9Q)RVAh-lٮekD99\ց | XseMuof 몣❊tiҥK WcX9vɽsܛ7}1$x ҾK/7-q31!o0RźFã6ꈻb1 #ւx&Ge&nq'ލ)(uVc۾1h%qO_buQċq|nиW@Ma31^;qaJ(#m Q1rtE?pUaHC (5/iʼ"Ȃ=pg,9ze3z^E;?/~W~yZU໹/͒%ԯG_#\!1o޺{ %ڦI\S:?K50/'3?9s̻s࿞iiI5~+c ܛ+J^Ab9-Uy^C:zb>ѼU3Tr'|0|6/Ǜm4*[D~yQX'o4Ǐn4|0"k}vBjMޚ3TίܱrǶ)\TPE*X M>`}o*oƭq.DGjCE3*[:Mmas>䚹fIy5-Sڱv[FZ^*#Dq Փ;Džn.l$6QlC>qo`A: 8ǡcc&!ֱm49a9;$6âY{Q=Ele[:?^,"WvIh${<{[/ :Iq%ZokKJsqۣ=MF:G<ͣ[܆6_sŽYnf -ތ1N3;Ou=M,М<*QIp[*G藺i8 Cu3M}G,dmdMU_-ң9ܐ'oA,’mj~^r<7'|[96¾k~YyldC_ګ)mj(V €n&(T[=LuŒKױ_kj OTK˛]_4oVh6}|Kaz^4ƹԮWp퇔&,ă;sn2f b7/ZԌ%hg/ړsܵ$ɗ\ q~b7k D @ vB5jw#- N;6"Z/D=,_42ϩ }Vr;w5 TN3r/?D3:hdUc(eMklbj>aM&B<<`K tq |6Bwo͎h:qގ!4b 2,'֮-"uj~7ؘ·,kJ|kQ:~@]5)nM-x<+c%/x粮u@k-pmR&*.iJ/[BBR]B\WlM A ˟e 7U *$eƯ?i9!7ʱ\ jإn%9|gMgm?gv3Gl{4.gaā:x0-(?+(zDotpqOy/#>QqIdXʹ zFԾP{^cvEpi^aCoTIa`q>aF{cGƘhu~_"z*U V(8]-|'RGCPaEm'[yYqՋ:Sq8>ԽZzKn*}SZVW%£y}^Hi`¤ly6B3ϻk78#*5cR8nb&*j)SܪPo1c>Кj^c;kϩJ,9om[WSyonռa?;;ཽLsA}Y~?V°1ޞtdcz'3QS5~^nPeC۱UWZ]9ԫ]Sl]|&֯E}OYб]686ةRs4lMaM5-9ҰR"Cw^E.a?Wם160m/ߌG ס?rK+spN'H4)=ݨ[\wO(lWutqdk}| r\ {pO_{"zRX1'0⾘b!8>Huk 6hx:`j3WۍZs+Y [v7 c=b,.wށ_rJONvd< o FEH[b&7fWGd;ytz__lpiK{_ [a=rxG6 uױ:u4C^Wlm-yfgkƚ&Zj%uCXh9|g{Tq:y+q{=nwbSb7|ُɭ=CޫXb>q,_a7<'qeyee| ߿WwӀf1`9焢bBE0`9cY@%If0+9,A%uOx߱yǂpZg_uլ9G]Q4wz8Lin2:»X%c|cwQOg4u 8 ķKWע1':EL&`Kޗ-]-]^@.&^C Ok|YE[5mU֭&vUkis[vv3֦[{0WYnsZԭj=y[\_V6MemⒸ$.//_Ú?1\囼~l.Ko^Qݿzְ׼)vN򭃎k2+kWvVnߪʌkf̝2eerZKqaR>X6b3bM*Uj*=VLrG3f0{Bb>]:@Hk*u<L)_y%[yv*?Řܫ=BAQL+<{l25S"܍#=v^ p!=BkaQ8)WwPN"ޏ9n59wnq6iA~cgw;Svٝ Y+LiQiWӟ}̘1?(Hܥ&7X{7o;c ~`5sZs\$΍/s¸/8hQrecX3r/9yL`_?<|gm~!QJtͦ>/-'Dw>"јkFI^{>V-%"&uldKnZ-b8tTnږؗ|DO9/ѨX)O.s>scOrY:K<hڮiUWwޏ\l%GFgK\Ysrxs[|Bw'ϊx:ePOeE[*jFלE[OQ^$6assF2sk܎On\g-*9ǔ'U/%,akx&vGoy}Evk5Mڋ&kyaA +B }s1xam; ţ7&⟣7jYf:PI-uѰWy-?w1p]D<0>$"1AX9Z+"pWSTiѰ\;TU/G J<`,'&&؉W$bO{E'L`<&Nbǔm y;#cLΉMìxfO{1xߜ@~ƞ葃r1 FƵ vNΕ\%K^GuJ<<< -̰ 1,Ғ8%Ƚ[ܬՈ85V Űb^k{fzK|{+ ^;>GӟMu~WN]N],%yI^bz+Pc+[@SuO=AZ8%N"7 sCuDc4F#ܙ??mn?CFb 9Gmجa8M5jjVQYjWǎ LAKKݔD\]awrzN',ST-MW{a]*_rΰT3j^oCٱ 91'[SEoqݲ^YXV3iUh-l 5k9a?gV+1,9[YX}9H#"7x+_>R͞ĺ1"7湹-ns\cqoLUE-V'ڟg͙5g֜%Uz ՠe}0KbAmj3?ENwf|5_W=L|K_H6 }f~'w9ǁԅ88 96 l#^5CO?!ϗI8K%x[8!9- y*&Ču툞ymnb\iKLOD+l{$6&uH2~s} kٍ-F79fܵ{67Ir@٧,fstO|7ӨQ>M.M~3Mӛ7}k>-աu.m!Y3Ǵ>|d]3%reJcEm>'8os&ѨBo߬͞Ý1䘼#NS%/9.ӆk.קXS5#Q(;p.=,gcbM'y:΍ztnކtc3~7tZ`/#^cpJf~lPg}bD'̋c+,qϜMtA=Z!`tc腿8S 1/Nok`b{{:n>q+U%~X"/BޱUL)Fi!%MO5E%Dtc A,艸[=_1 ƃDgc2Ͱ S[Wt#T^U8Qw1AȩCUut֦Ϣ|urQl>Rݢ<\a3xJCW[vnWzqZڝ֎lϟD}%^<=:9v*hܝbr˹'Q=TM9ya^,G烹Yy6dC<㼕򝬋w` F0}ro*jVOe]\j+!a@kcFT);1y;6lDSצڦQhOvlaOmĿ |;|/w|)uTleʝ:q_yO[a؀_:,8j~C Rd*P O6>mrrAC rvr$9aYد%FZSqTV_>GM6DgmHl-$18F?Oǻ:D?Wr⦸גyat-s|7Ką8>f_Ĩ2ߺ/#^enfUȧ<586p 63Qj[ďĊZx%+f2$Ll@nSJ]/hrbSȟ' #[4]Ըq*Kfʣ'+PkT}*-k2[Jj4O#][}e'G^T Ͻkvѷ 1< ylyK]sa~H.n*}Gv O6~`w`ozHW]uۿ[?s%͇fQsqs[2MG?hd̙f|AӧGNnN }iY+TVӊ\>+n'Ηv3]OyeHSRGoZd<[ s`.m r$/ Z+z}rur!R!3O#3CdXۓWG?s6"[9g!fnn1yEns\Q/|A.R卣kٓɷ}G_E/?Y>oyyAyh}<;{e{y|yJ}y Vw[8ۙ(S<<-OS^{pԯR?~"{hyB!5?'@XbTfvOwy隧?)))ޱj|_w'bع7І(?];hs^LJxٓIu+JF3k[ˮϲ6!Wʕr us^#'PR}):Y@3[WbЙEo12d7_9 oyJ&,͖٘IuItn83Z8֦i&Ȼ&W+ԓS#_`93w^dM>cɭs%(0r=EjʫՓIP.Wsj6Gf|y`ӼyI3L>n;w4yL&3Jnrx!{Qb9>Ǒϲn+׋ɕ+RVmOQ8._򅅟hZiݦuNNNqʵr-[[[+/n^hu5;bGQsW]5QweݕuWb}['9Ičv݈!1$(x$!,-/__ XcGbtL&ތM<2oo+щFO8&Z,SU э be| gh>7(E{<4"sGq7..9Yo1*$c814Ż̮іrH&X,!/刭؛'эˊōT֩(>De5;Sc +{PQL1r@[yųuT,[E&w uꖧr`MhjZJ4NiziGnw5u\tfu5-\WW+d<OQ_7r@THv4\9$OAggj@ +kV!7U)k:MRCT`]=Mȑ>Cp)!ϓՒMɛ',0ܞ'y _y/}y`D.뉧|N 4y\NM90M.[y:y5>Eb+jvٳf5Ü=Śh>Jl[[o W~o|SjkISc9Qu5Qh{7caG=ߏb؋#;=B,V׉/Ƌ0zw`#8/}/e*OF4{$lg'с|s&i2ټ2s5f7B!y pxC^m5WL-or|,wkɻp9|58N7+Xr9 RE6%1)$L78|9{EXڦjQ\GcM=toe,ll,^{7?\`pg;R詋7[32ng~탋\"RK4iOq\FA1&'CJc vT=v=_ #fK^$,GF[vA.$[nqOm \pTP\EzSQjt5BaPDc Ü/f?Ċ>)? 5 QZ3\/_>f͹" tQeֳ*I:QKvh]V=/[Aʮ r>"XS~(9&_̡yyWͮep`u7ɥέsxZR+gb Tj&-^3f:qR'}o%ne-kLލ#FIb1ή L4; {X x Ooxj,m臶;bKXEF<-zW{<(Q䡺C &je ̲]5z e~lΊ3lLB:V$& ^ /^"qn,X*WVVk|Ty'. 5+̋&j-^fRZ͖jҟ5j7pR7nꎏiѩE7R_rX-{/RDݲ5^'?,jQ|yV);SRRZ4ٰDap9 טkssb WREb5C0ٺ9'/ h6"!FSz,guy5#vIh q@fbLQy|`, _jnq[b O';3WDO?{EǢfyiQAhGst&Gp_(qrn1G |2D˝sYC5Qrfcrrn;Rn#ON04 "'0c_Y u:sdia87L܉-OՏlsL%-rl<~Gw|aZ\com"@ek1H]=Ap_6+L4j&[$׶5%NwpKcGE@sٱyJ26O'RuU f[t QR*F.Ӝ4‰1^+?!Zsi&*vDd9Z3c5OL40*>vhg%Sr}ŜF 1DžG%"'n6jd졤-^8 3Ҵ|f>KF;6s5Kt˦U "_=rOmG⹊Cs_B"Tr$/!'A/<{aU:WXǑ/rN&7{jyNN05alЋ.:<#f r3JMU)ŠbT9fhil~*¹udV D>Bf?Dߞ'a1,a1ldL&Zmњb$q{<b#c";[0 x@h2b85Ļqyt”XzDx:#"F(CbAۨ1!_98VO]ۢ]49n)0/os2O2X_M#}]K gj?WeraQ^+Ī9Nq%Gy)ɱ&/oهTNМS_hE\LFVSzh+~k^1.ͅk67*a#(DК+2һ8Լbﱥ瀞ΨnA/^I;}%bkӭ1q^㛸!W@6yqHޛcSZhlOe\ sC|mNHLSla+[ϫ!~4fEs7qeUϜGGg;e5/#ff+ڌџ9=1LO{m!\(#jePf沆g>L>Lr|cq]K^o2V`|rU!wql1f̙U@ؼx{܇MEOO<)OB]t*h*#4c m B? tgĈ#9ڻ'zDAq7tt0xeJQğ/ťq%['Blـ6wcs,3y(v"O+qM_ahKaD/u'vsk<(Q:Ƣ8AbiDF3Q)@kd=>+sfJbXJY n?!cQ@kEh)ˑ=ybAF.h9.'G9\%_˽,Kj󙼝|YW{Bqs8)7/us-Wv 9,F对96O&#i2O!P9<4/fx%嶞 /5Џl=qgjʫ[V"]Ufiyg,ՠA;r\$9A"8թNG;,qfg5Э}5lut51>f8fSxZ͎;obx8XX[ryћbxbdGd:bLjOx N}bSt0&a/Zkǣq;V&Nns s܂w] bg}<[ɏc՞Qq;ڐ)6zOӆVAӎq47W׋]h:׸1MK4Nk;voveC4;oVLyk˼獉mbQE .{G!s{e?>w|:ה읃*B,Bc7ojߤGmfm7fa7pZ_ffo*+Vv(ϚyůTN\JSe䨯N c~$VGQl^ܙ['Xj"ɯ; kda >os~S[4)#N8sKk|Gb3[\X|&po.ZrQ1"s'bJ~d^1͆83fgzS^)_iU:@uj ?QW'MmڕU6TYӭ1XƕgF_ =jXت۹aK7aޢe54uq" 6Z¼nhܹqfi:9vAָ66Rm-o,+G'd}xũru}몕◚_)^(~0ءܙ4-P[^԰ 90֪v!ѤgZ1"z1, :w%s Kc]rvfX\+c' 8!f\Z;©Z; 0+3qZ`)[&[íW=D9=ʮ9-'|a#{:S9+VqBO%;;J 7us#"?Ηr-ܟ\W]^KWgsia}N> ʼCS]#p4Ƽo.`2|9_ڡ|r =(ծwśfԥ.qNisV\\lK5˞n*KQO܅L{Hiq[\^+D0810=kjuX1.QQāֈ)(vГ(rjC(V/UO1rc)ԺPV>NhU<):hDZĜX<بsUqeBWPeX;=nh0<>VNykBP6ZrB^Bj2գ:׾TLʋ[[[,oY4W~_Wooo_⫨S '^{v͑T~}'RR5.%3E[š1zMVl'v&NaV$N3XN `]QU~<$7LO'vyo\뛝[Dbt\K`_doAwmr[sWq]+9ԇZdM s>sFF.49QO]-YӐo.9ؗd|Vn*hfGWD'y dG|a.'ksG9>WЬ-TY; ]Hx5{9Y?Dgov.||9 ̧ķc9OE|}8_@fBgThФ M+4ԁ 3f/ rp݈7{5Еfy'Os_#=Q6}g,e yLW[\Z)\ڊ81sq#@r raO:qeܜĆp\zfMrk4NG,Y\OPy["_<Ge{pOP.[r\':>QZ=,TO,T-/Υ(/zL΢"4]ڸk^A٭GVɗqF?9upuַOW6hTgDrMÚd󶞷5屳L!YqnE-0ݢ DU5wҼqho)r*-@OIfE.^?afb+waQxv;".[4ySئWb2/`AѡP7ܜ⤲{Q5*۔!onw3(.p*>cyb 1)9)W3Tk{7y=35:k9r-r8q.'cl6/&0z--/|>zXX-oJY[)ۗ׮Lީ~v|Tj|? B񷊵سسǺϵ: uѪm_kUW6Ejvz_9A?l2o3'=)֋;!dz!Q6[x|)?$I&R%sd4`c*8jIDATj:VX*)1b|/-r;̴Hosv&6'ظ)Ft^gs1`h7gOa|1a5GsuaP8Ւb qbUХXX7?h,Vrv>Mtb09%$kEsk}<|cx"fyH㰊, lidqwOՁ4j:ioY@#qϝ&-nqKL_Tv*;ebf1? O'ZRR=OuQ6^8߅Ēd,I;rё"ruygމZ XwE|S#8,-ɛrvO9 -c+'q8*b|f_u]N :&l&i~1|UqOb[Kd3!9kэKbq'hl';}vޏVEc@l+[ gQĭͯ΃s%bW<7#xy9;v)yxyl^I//ȓ|k5r3[x#u+M Px7kYV^T֬Wܧ}Nv_JEyg=ᐋhǣŷ<.s3Ixo_^vVUZny_~Xӿ7liY3rYkwc6˃pk[Dr3bbA;Mbr9<د؅9/)!}KTi1a<:OF9*zRkĉ yi&DۘFK1=ny0%^6v~zcl+dLKmN.dX'A87FQޓWjkqgxn/y Ľ1r-SD>rOO<^rIt틩և`Ox#Zh4Zc.UCcQ[I%7sG](iE ]vڕy)cMS}~XA[f;5k@9W z8c#qDl[Vĕq}\EcY^b{^XИb(%,~ bӞXƆcVLӄN bxL#q6NKh:82qlv&6u&aUQ+:+FvM "V>#āTC8[b.X7b^*ÛѹlOu)}qJ79z-+=˩h{gmޢ47z~q Z[-/K e~ކy;=yq;[}jv6,|¯, 5T.mz/8 Zfn!q[(ߨt MW7^1os"=L|g.@e@')bTQ~Bʏ6^qx+ZTwgcA "6Ҙ+`sE*S**[?#x݃*Ҽ ms1qnyvi%y57f\lb<>'XZr:p셃3<#O'7h+>o(Ɇܔ\: 8)JrL#K}CΗ蕇KgggObpVgMo<PgHǦE<$Meޟj aKrT*$#oMC >o?{hѲE-){ލ1>Ss(̕9_u-fN9@_4~zу8ɜ8 i1#f U1iH18ǻcMq?1F1 5ɽ vk  'e qw FI#rPfi;-6bfw+J[ FE7{mvv0q .08#b~U(.)Hm3jM Z?Օ N7x)o"8hs&Fǟ~^1:_&s89 mEjٞb[3E\d\֚߬(Tv-sN7&cӽ%Na[׸5\%\JdujnWc6Yf,/܃VǴjUnr=ڬfoSW۷n(rS_ K4tm8V[j$N?*R,V/P( 88&Kˁ=RC|Oۼj?*KK?Z +;yo>HL kAclKޔVO9{ꚫX>w^%pq9||_[%oS@~7SѠA\1ϥY82t9/}hkmhIIu'՝ t#3cƣQj$'Y%];6 ay_ޅy4&nX Ό}Su%VZ/;8GSv487qxb5ٜx_:WY9qJFlkEnR/X#FKbR>f)bR xm:C9ŢuPn.xYaI ksuXze8(W(;CΈ# _4- XĞL*++pVZZڟx_5**];#\i,vb/1 _OeˢZުUˡ,tq O ,&.D_hV}g+s*b؄K)//ȅDww^|B$O*CS\h_|EeReX͹^Wwgɒ9 $6*:D>j|nKtQ1:]4vŲ%ތSk=KgycnKYo70'_:^ kp:Ul+pE=YOeBo\x]!{鎝cP;ʟrTq|^1lkޟ}`L)B7TruE9Ewe]3K8Y})ʝs$msܑ |>l{[T,<CC{Kü/rlY7'w&ޱMHb!/{)r34p^-̛װI+1_0%n矧Kq[a%+YiyJg~r}}:d,9|s&bюhi:Cǫm䨼#"b7bx>n  #sD$/#1v"3ϟhka-d7n$Ϛ/q@ޛ#ؓX*:A1XЪƻq{9yu hEk0%.$;9KXN't]wV9ԒzV>hWm+^7+Oۚ5]Bb47iZFa| FvB%-0%)v5!E>mc bg+[K o#*wVϵIZ4]KqkqY|KJ b#VZiŁn}OyDuhu^\l[ҲǛo>X;:h?}ԪQ.2ʅsn}vZ6T[uU_Z&|[P̴ lPAVM'A1!F s0G,zQ1 bDP1@QQff_}^P?U tU\꫻Whvכ.˟)v k͒K^Z<|Rܝsy {Y4B[E)/chwfGV'/j}J˵QCvϿ7wg"1Ѝ(9˺+{:< vl.AZ>v"\wZgX' X\YAT֫^|"ɮX'?.JF?tNyss7iVL۾'٘fu뚳עߦw8+:ַFo_x :gh ?x)gb 'ގc21?||O0OM Q QƋ1Q>21ډ q|Omq,1޺Z;t#.n8ߩ8-bjWu ou[|ɲG,{mie{Mץ5J3{ҚKScjXs5\1Zdu\@eC8҉QC)u}czџҼX锎Ρri=secE VʺjJוvw5oU[| byGM<)^΋@z~'vM+qkjrTz#w ߌ^~Ny:{Em{l- u#lf_sj@>ÛR }7Jy8&mrC>}YSp3Y]>c\**WNm1~-W7o6b8&^#fxCsesK]eb8?"gC>0Kg<s5WKƺ'g"rC7Q3!({*3򶜄_CȖMGmA,Ce+R+הk]N4ͶΚk{E/PRYXN*Uc-A*;_Aep{~h=鱗xr1yͦJk51fVc~-jڸZF~g{~Ivg9 cKĚ\.˭;| -}FzqlYeoi7fk]_m[2.jܽeS\^4b\RٔXtPBK6HݕK-V(c|41D%HpjkӽC . mEo?xڱy%zl_{=Xb䯏 qGJߩfh`QŝK- #O%<\j3+RڼJuo6y|R}fum&)}TB~=EN%誗1иk#(=Sz4Uq *OipV۪_q-od.+g.uuuvo/aWBk+ucxK7hAZ lә?/LKgE}Q|߫d{ezmUT[[ +-lCiâ/{~7ȼH8vEh5b$'g;1Ѥ؋_zDpTL5̚4eDܾ&}T-,dc8_ml/N- Zwq7 {7Lk>C 4yCQCS⹸ׁx)gPͯqsڨ&vj;)1|9G2чI+{oN,ƸcsD~ S>@)U"6<$.rl4@/kFĦ Hln󸌸1<'y`0nvq5S}Gb/!|)Tt՗W3f4[м%ͫ~tx “1Xh0%B'NnṚۆOmiŚ(u,MIJqܢ vjO֗joyiO{mںysUyG7 Zvj8<' U>5s5S5yO6o״AӖtޠj(6o:kydӵ?{,[ўŽjg/(u8zX՟ͰN+-[5TU}Ti=z1[j5nkyo(_Z51+w6]|Ӹe 酻طUc;bxXN qx僘C4gIcN.qdi7m6 ڛ-1_iJ\lUc>shu#9T!RJiX#_ǖ3b G5YJ*Jbhkb~蓿cgx$)y&'rp HGs@#Lx1mjH L q}|0C p\UQGϰu r5@C^c=\i)Kovkr|mZس>@Gx?<)e\#,'.YUO,| ͅ'/-*訣x3&ŬX,v=v:Ǎq/js ;d{bx;':Ortw?CI<pTiObB,z)"-qUܓc]8I{ry>ǚofW%S[ՖCc_Lk {y5Vwzbj7!2gV;~* bB}ލcfD6R~F<Nfwh|{:~yՉ> }~ 2N'wc'W?s?M*W>x8 o:y( TsN1Xc?4&iݨkOJk5?xL':&AG8˞q8zJ Z_5q@yu^WE,$4KI9rvZroeomI\C>7U/ ږ%q0qg-%닉y6ma93#OWX/ho[x v'63򨼖8?2+:co| ?/O-l6x}TWyHU9n?JM _ޗof^GVDoǝ'K^CLrR7/!xW KԮXNM#K_!NS2UZ|X~m^i3o3Z{ϿohC)T ,7_vy nR4'5,ϯY#_gѬ eĨ8jin_{rZ.rh}R5\ǫ>*mJ{iI 3j׭}zMZV֝۔_m? ?Ou9ڃXdptʕ}YXY8s,-W-he;W'&>'q6Qkz8tqDwx8Uˊv%%FZ4}C&SJ^Uߢo|WlJ|6Ϗ;7y'b)"̇yQXƻzV>4o >p2XϓvǮv 6֘=F >-đd[:aZa} 0[ߺ4L3AwsНy_ͮ،Au-t]n%t˚lϚ f=kYGnv;jը2XM*DsNd<k]퍋0Gj|>ǬD֋zO7,.ĕ%˥0D{Tea v-0YCAos>yS-ƶ@xs>ҋ-0Z`!x9$Ğh%MLN楾4?v-SYz^}džo)dGl:[.G80%jnkb%]Iv:IJ9RDeWrLqN,T.*>ҏnUs:UQD5Ꝗ7ܞ5oX}gBN+1sY/ s-Le`Ô{L,[y_8x(/T* t1:UJQ^ړkݚ=P#-iѡ,-癔f=*ƩqG.W@̣4 ~4`܏孤 KĒx:9T8=zSqr/3#/X(y`J6aݐ2Ĕ~(n)CTӝV,}\{s\.,kz֨t/,׫-[P6?<-L"zx:!4+_&3㱪!&y>9Fa8($.GhG8>/qOcc 1' -8˛g_|kW1YM8;C?$̜G3mc19SՇc &P'n1EL+=P:mʷRjWa8JKP#cRCJ9W9h`~B_4j%b/L (G JwXh3\{n:E>uB\=bqtEpYKsDc[-)# **㨞Vӳf3j٨f)m֯-ny|m;V\s Uǖ{V::j4f0V_ڸ dRFvgC*/P}uş,ʃX)q9̱!V׌#EDlUu:;$w1-9q:,Z-qt8|3$Bg^jB-N8|a!vRm7={lc<[JR+Q.,5qN [-n!vp7"o2,X.~韧bbb_GūH<2e1vq9{1hAڗ46M;l sa/?Dknܵ<<,2ٞe.uYb@l1TS<H k2~X#SMrlI/ڝ+w~2Uܘx4aJͭok59\&ݬ;yGq_M1 'd#e>W0p zbO1#pqo%9z8X+QXڰ=-V&.,}s*o w7/B$r dF'xD1@,/R.k>']qO{jSL.LC^|OGW.DځC_ zuoM])u\d]X3 Y٪r ŜƧ(+Vo]ҝ+{- w.S1?JJgQ~jתjjרU0ͷn~AHj}GP>S|CN)*#vFx#gQX)M]>JxY㷕sXVfOK_LvjKأԈsb88N Uj!u@ތgETX]šb!94)E!y{XNRt* J[W!5g8[dUt%Uq)R_:jYnI^{OXOaWKKz=chP-ood/G{xONNtpM͹9wqi[e7hǺ.uA{~[뷵~C/LсWd~HԻyf71V!ʼn9_v_Ngb1ڐrN wWuK1%ȿA{iMof3yeL\jY+ǝMPdh.9L#|m2_.Ky il^ZrOrV.nCGDcKR(^'^^;α-O#'zܚXN$V<e b/:"|'L*cYos`**s7n}+XQTTt6\?2fSL :]l[~ł4p/$_whe)qMlUTպĨxVQS].#h|.LfъbZѿ45؇ꎩ˒|0Ū7;. 48{ƍGB3T#_쟿`7oX!m:[JnL?90䞔;~efӚ(ǐg\;y4]ؗ\.Nn>\"Fx%~~:lfNGqm-rE|-<23Z9…wJȻ;;k=״bgJhcrqY|k&y6GLy -l&ͻMǟhK63sYi,ә̝94lY|'bWkzL7/7trSӝ?1;ܨTWqrKw]敖XTW[&AqqugWw6GOw#]qfV89%vzIx47x1~iR$:kQ1*Fo( Jx0ĵhlC٭nw G޸x2Sx:ucH܇{bF\oiHUoʷR;f 9UWP!-c I7֚eTͯZ@*U⊸;aĽ1 l+Z':1c>kE/Ib ]؂+r'&[lؔx"^&'L'nGvuACÂ~;y{0g蜍<>k\~ˈ67N -%>c [!U(=RZۖ<4|?515'g+rz^1ywKq~ي8(ۓ=x"ks]lK.Fpb dcIl7)+AJOsY\}je tt~nu.a6s.b~Rx%T]l]&vfͶ5?R[mͩ)U9qT<퉺|r=Q+G c3._ϋs/]uk,ٷaߩHlа61twѕҠXJť5sK˚SD|[ě11n#6036"mx1wFBohɭyzdǬ#z"7*gb/ʯIM[jMM$Ud}NљlO}i0h֖V[k+5 zAcUX;!Ĩ8 S&k:c~(ݑQb}pÑX?NB>:bMsiIt*m)}뺁8<ޔ.SGiz`>3tc Q={o(WCBt{tb3ym.2Ḇ'Xe(x>?@ԧmp'r'x'f49T)././ބ24v 2[yM>A۫zIJla:α1 //9V݈סGHv.]Px3.mk> 7ʇrcu%vX3Y=hcYhk~;Ec~Xݙ6?I*Pލ,MЅ[_hҮ=@wvʤᙆޤۆ7+/bī1'j˪m w(=GEdco6T6|I^wqg_U֬`d_Mc[m(6,Zyy1E#b(Nq5^3"7D6V"%W膶q76^ vFKsγХx)w&ayPsf1#g P'sinqJ`E=aꪢ%嶥QԧDO+X>6Ĕ C|]z}V-v@9x.O5ֹgwòi_ۡ.糖X#%;xic}!o'h'ϐL>QqW 'y5+=I|~6O*nb+Pܟ=#Xlˀ׋1?)BKS$*DZ_qp\9! rX!V 123zEOb|ַFĎK#&-[ktAX#%ȟbcwP|QBj.yf /_ jYTPN#e~kfՌ诓8:nv>ul[Y-~|#踙<8O)ZRb_us+YՑ8܅A&X_+!w7)K>t<Gn!, fe>݊[F{:^)IN1wd7Xj.1X'QjL!n3Zr8ÊvK$_Ƴĕq}Vt}1['lkct~jCJRxjUOwi؞l_cmW{M/rsס_+FkLý]Gg|+'(ۭ*W+mu0Yg8xXXۖ 19\<ލA9b'pk6%q^gW1q޷1֫ax<>"Qb7㆘P^'#NlNv-?k_7c4f9khW=ׂk.lr\{=WS/ ӣ[Cn 1ߡv'aC\oWIsyf^ǡ7hn}<8j()u.]G5TB^Z56"'qe>_|ALȺ %?LK1^@x3/Y։#UU "@qro`.AcI>dz F<;!NP,Q M lFwCk-ob9 U>6L= 1( ~S|o!9!Wu,Ό=@^JKKO!q%y(RM>7i8ܼZYgxuI5l?cE/|Vc[i=柯@;FhMIu2X|1Ve sFrt\P; 6$>vPܕfjq&'b%ÜhVr s!vR:`4D=~Iw0M-#b! ˯z_ϥc qjwfK,!׬l_>3.?Ŋ0?:"'gƑgdőq-|PlNuf.w]GrFhyO N:>|r| qO+n!P+}y94W˖EϦ-GZc|c.m~OKȾ1Jn.=+h6b}bn߹07-8"Zy zz8c fOQid(P>|e-~*k6T_ ԩXw>ۈeǤx=[cKS _@ Ć$:ee s_ӈg@OG OyKyNKJPU)}N~ifUyv#f|ۨcrqoX{.[18ܾm˔NRyxh-wbSGz#8=N8 KH<&pU\e'F7x0v֊[ AD}A:C !XVf;'76a/ߑnv3 g#vC3[*FziKt2qSTFh)ז(OfDM+T]P=eq1pL67`'RͽTSj(>R K*SF`ҵAX;Z8&u#1y $n/, s6+.*=Aw#|EcWb=nRwmr<>qJ'bŸX6q*Et'6͹9B7 %U $'e|˓5^GVv&g{AEs{?zUWFkUW$pw?/ŪEyFNͧ0+'yCsMcA.$ų\gO yB1n.AF~j| 1Arr&7:/CcjT'|;nřyCi^2s-a8K_9)o}yoދ;sWNy'yVʇ>)rhnVX0t ⎢?%jdVRI<4nTj_՞o.}s )/S^ŵN+03zB#W==/ʯJ_n;s+]Fp|Ʀu$ַ~t NЃ|u+>JNLc |ʽuC+/:_(3,1Gll|e3|Oؖh}t$qg(fcEɸ(ƒ`G\k5#•h}S[+m1&8)NDoGaXý ܏qðQg̦{PӹfkntgXDbD%ƨ^EC;\<ǧD< g[އ"1>/}yX.vc9;Dg;6!KbGjv9vj׮9- N'zyFo恹<,oZO{"Ss&7 Ls1{jrMn+{)xͷy7.u>F7K1>̣w) i,l+CEo|=pyJy,Dϡo7H<<xbȧFģ5b|%ȧgbQ4#5;0W!ʣ xkkFS,q#24E8$%㜏Ѥvyxp9XQcBޡ{u(ʱWƆI3z1+hA:9L4Xw !jLɳqI|D,v}H&F:|m`~8i8+X>@G R !scę=03301X3:񭍈8uy/W\Lu׏v46Vnk_8!†X.oͷpc0qUc :s$:hb+y(''`R81$eknĞb(JwGw>jM[V'] v?c8Xj}kr/C9 UF$'h@3OL:R9>"nf^oX_{ۊdw BsbØh6PnU4󖭱I&ȶij6ϱvfpp4Y?CW84SXqNx,ω}7ei6QkNǤ0:I~*A҅ YGelJrR~k,p] o ,L\xeh;ugxJӠ51h~ͺhE(T>|Jn{lݬcNOs(&#X4~EoOTTfWfkk+Z1V$FJą=bW-=X pH7&:ДlJvI "V! ^g9+zÚzbx+)n NR"'/Ɠ1X-^:d,NV 7ãwGd~5v\hI80]ʹ\%g3 Bt1W|b7JƐ4.(ʧS{kM]ͺݢzJVͩPwT8s'~Ozx"oBC']"Wljx/{I?ا4 ],o 9"N̏ɇ){هh=^&^3t.#KqwqW3yunP>t+}G.U^ڙkbA5ZFmZm Ug_\a3r- /sOol͊r99ʏ(ͺ 熎 w=rOܞx&+8x*hLLn5-XibM:EtˉOľyCrX({&y _g8>6dHG]J::cA'w5"̰Y239x֟VWcQlV9KrZ:6[7ߺVhViViVT~~f!t4Sc=lUeh-Eb?2?aVY:U[^yOn ?_~ YmE.дdZKpdى8;:4ǣ>-_ΙD}-Vݱ.6W_mzIiNgJCK톾)!BNv-yv1yܱq?MQ=4ß1ɵɾd˦Yea vLLuqmj,".YrV6;owZcJ+:TꥥO)׸\)\ڷ&ࢫKm0lb4^gxf k[~xcy.kѮq/:>r9J;Ⲙ#"vmX^&:Ÿ<(.׶ތ>8L{Ǐ8"gn+NU UUTڗuj~mU*MȟXPnb07m.^fX oyjxK; %繪#EmlHV'A^rmaPChA4Br_׹\6Ou S4ojieve/PVTY5vA,[=Ou\p68nkylM^䩨DtqUqulEI*8^Mz+||׀8;ؙC9 F&Sh>O5J#(mXz4\ŭ"^W(-L(1>b2!O)˞c=M7aKN^r+; :렮sxWJmm*Tl{g~ҐZ7:g PB ̫J;hqlqgOr$_ל`>>r&=N]c \?;VzN&=qj쀍|ؘK Ԉ+Xi[!_Pe8khCb!)/yۈ=-K|phYxչ?O ,6Zc-{`<k{=nʦℨĝX ^F!z?Li%> СqImuiw`LO~'BJ+)c*rWjy#bkjpM^:!;M/`z4wN!hc }Cd=B^WOx3|i.[O&ފa6R]Wꧪo!fEXs6-ۋ],ez_0'giqTnP|&銃f8fQ`Iexf<݁{,C2ap}ܪ>}|r{%k0;nq / v@*D^xȺ??8X<`Y J5& 9DmR1<Br|P;lA^oX4hы9ӯӸEcFJVVh s\ˠEχO5-c1qLYYF6fc/*+{d oS ߿ό63rF|0GNp\t;@*4E״j-bVH0#v8&:XbtҤs)b=1<cEDOtE#4ZDBƉQ_DogVշ&|]Ud0+ss@1bBŌ9 FTŬ0dTr=~vqg5{߻Z +NP=/bW%cĞqxLS(߂r]"? 8Xbmc]u1U/HN)vG2略Y> %ŃT^=wm|-kyL>z+-OŊ-n$4Y>t@ӠqlTO>fW*CGTEM Ckƣx[C h`r+-p|C11$VerԬWR͗4ФNM&Фk Mͮk-8 4ofQM^5KRy bgWBc*Xr:NS./V .poD?axYgc-Ecfuq$NCYAܟUf`svό&?-3;̱|~TEdy4ͣ)z 1>0 h4{z bBP7$^ uuav˟|<[%eU++UVrMUʙZ[h1EU'L?yӮ9WPUB햨hʨ=IU׆_vp_{yE^asTTXN˙~bb=3Ygz~h->Mj2ɏĺEMI\'I>P?H+~ePeMnOb\/'_rxCF{ bGOVw:NBdޭG$wntDz96z~vqjtЌxun'p,eV^\E X9ql&yJ3lD \gs E! 75'MfXSlvS_ȕKbX&ΈI vF,ݝbxx#4ćUg:Y%#{!@7UB3g &wlyO]sTч'>oe.<1y;;y4UĎ$"j/=r+vq%Xc{J\{j+%ϼ!Elkˈ7[yH#lŽ^,5jhihNTZVSTM޼ *Y9r=nW"V=N13SUIJ2N%q)q{H\_! ^U_iBX^USr\KQ$V>%g6܎tgJlu?a9y}Gt"[y )&u]K8Yq8T^+lT_"%&njL|`&MoPkc6T;=Z|"CczXRuo{ynshDKx;#O41/z#7FrFA6FVX"lWayq+]@nuΘ^Et<93a [)M5ep<ժTqY[} wʢ.bODoW;XǓC?>d}+cؑhoF}>V"fGGmmk[\ WD)5n/f@?Yp+Z:+hM]Fh?żX%nu6:.J/MflB?폙 uDObcch^Yȃ,nۀ'%^@ Cx[vԑx8u++۹Sw8Ӎ'vq~elHa{6r0e*]Gꢧϱx X& o8#M6qDc?swqX 7+t6TkǛ/U"X՝8$LM[ĵѿK܋:82$oq;V:lhe|3Y!/~^%{\rDsܯ~!Ͷ!;ņ#74:ơ +sL$Nţ 򧜈V"3=9(V=ϲ3^ϩ}{䱎47m2'sz3,W)t|PBWm\–&trch҆FQDEuv,{rZwk}İϗw{?M|Gh[dB/^W7;R>#έn4Q!Gd;߱<ֳ9rHS%I*Q;_a '䑾$9y\NV憓:z䪹dHr\-7VHr?טENI"/Ȼgk(. z}bL(.MM͡9A;ӳd\AW|ɧFyO +9CX̔<uAb=h<=ZlZ ߝo %-Cq 52b7;f%ݖ_s\S>Hސk皘|cUռ!/(SOܜ84^/Gd7ܮ jS'r12ol&DGE^J dbq|LkS$-lss 1+Fw+Bא9fhJ!=ӊrúcWn9'bB.[z1VNIn$V>M0ʆ-ڡm ^=y*Ǡ92.}e&ڳx$_34c?LqgƆoM֋'̋.@㋣n]~Jų ?>JxJkX,N*wZOcX:RIA ZIڎ6~KgqPnQĥ9ݲiNQfkmUȭbhEl&sF7ilv\ivl}qZtהXMoU8"Ea ♜fWj#"~pۉJ: z)X66a~'WT]q@x]`=n$r ED..x/8=hb s?ܒ[!D^JEL22+1ϣ^$'8q'_V-C |Rޯ~/1+;d;}#y4OX=u#^7q<޶NlFq׈&yG&cq5y.Io0-M12l+OqbTu-Iu>+x,_+83f[YH2+֍95/qg=D3wF ɩ+c./&G=< %7B p9}=%u0Z/ _H>w]</:MXw{uٸ=NvqTX{*UN‰y|n$sqMń_'̛0ɏM>aYAQ⻅114]3ԸJ֘MVLcѦa9m) 'Ϲum|˥\W,sWЪUVPkجiOMl8약ꋔ-**W/Օ- M(螅D/xX2y9Z}\L5g\,ryDŲFM-Tߑ)~ec)4Z,8˨#nzb\qoveG,d-1v$^b;r<#SgZƞp2OjHȾ'*]$o})fb#b2&v{Yu,a%zȝy,>Gg#ƘW_d/R[ȓFEC%cu|LX1L'&x/)b}Jg!tyܝ7 1_{_b*N.=#_p3p[+lڐjVFj%;aTtp%s r+W1iL7/N ƞfţ^b@>C,t›nN xD'yllX ?vx7T53/A܌)?6p^q\D>=9:‡d-.6,OS΍r0;zو8>կ>]f0 -YYu5U3UuÆ6>^êoo; 71)^iݍ v9~Rł3 uՙCNjh^l[mp ?#jsvV\ͩ\ժ9[rdwvxd7ٶMyGBvCP{VVo2NY]\"WX@r%{{ȟo/rB>oA=D>w9\'w()vpYdMCb!Nyl&wwD~TJICGncSU|$w02?ymf ~(v>X!8_OcFSstyb.Fqtzy}-:Hl+}ɢXn4ݨ]nW^D˻CS14S5*\q?^gb/禜u,I'abޘ Wp hDz]qQZΕpQ.R\L(rOA8 瞹-Vn9ˠb׋qaފ~esBl57us$Y'f-wsKK= dzܯ5t{sVy)rsy+fK+;Q\Ms5 3#zx7ǒvΘiAF,gS"C0i䗱k߱sXIDAT~&}z'EwEN6Qk 3͊}TNnB/`b3޸-eWb]w1yҕF5mkҮjr;/ۤҎk?cO'RC#<]w_屭s6bV=??N ZЮ_+YJo\_vCwOӗ*/V>gg7oB5o ݹN+uxK9=ǩ"y~n yΐs 6,XlmOr3CF.ۋ|#ǚJFד#\<`On\uIyVλݳ_ȯlN4c{aj!7bj:~3oҙ=ϽȻY_Ԝz(l屼q"j׭2{y+Ȝg.>ya~[u'ɟrL.5n ~΋CT$gJsN%tXd[u?hcLn6~7sYb Ή6ħ1=u;nQ\ '嬢5ɕNt61 _iyŹyϰ=Lqf>k8[Lr<{d'5PG^yĥjb\,=&VlhIt*?Pݸf˩QBtl"FTΥnͺsc' 9ŎRտ7ib]m.g B Wpͯhzk,s|Nxf W ̥"΋Y/&ti,,A_id]e0D?%sZyOީw:~סܦTU#'IO; k%9<8#ȧmlGrHvwS()ؐŜ |@gFrr{qm>+(!FR(H(򄜓(>΍}0Qى<8b:[篘;7|Ϸ921o YǴAAzhżSr00|3<7<ļo9U)g#m rf:Lާ&?,bR[/cmFO)%~rZѓۖ=r9llDPI^!yxͲI>Dz>ߒUd|lj\V(ʦ"g 9=Z|Dn*g9 鏸<\YO/'ىq?b<kVXJW=b4 UU\}=k&lI}ʪ9U~p]ߺꞛy^e|ʝra.̅#'kןPyhe(vZaLlQ5#xĂO^O놻nkMoz} 0ܜ@kĹ81iΊȯ*Tc ʰf9JVI2v8(p >cka_Olձ{( rx֫q9:A;yk8zݘOZ@U_UDuꛫ 2yyđ񦭙Ĭ5fmG-3c pT>/\XGTDm OƟWuյ~W̭O>T#o"˥sj_&?\bx$w^t꾪}<r6Gv%XW>5P\ ar1|+{x:e|{w"\rbwpr&(FuP0wQmaNsy| `?.v\o>&kyrqKV_okl'\>_ n~-V1}Q"O)qGv d\*g5y4^}rmN&u8#ё\!z8:䁹]ތ5˶7>3=\K88"ț0މǍQqm܌RKpy,/N Xd{U`ES4VvUMFTIO55I#>%VFo(G5|47Г9{qhEV[GGůُB]ٓ<:/0arrN:l>=L1.g`J><;/4bQUv$ϿTSCe g;_=3|qyfދn͎9ٹz}c,<{A+w_N|_19^y4҃5UGܮQq.ޱUF[.Aj< <ϫ"1^^r=R,Cp{r2yO=gUd tʟ}+=yV~cc1bIz&`sͱ/I؜ ʍefW[>Z;͋Ex݇ GsOm~kCGUnȞ97/!m@1Yy+YkGMmu p*_w_\-\lQCɷ͏0=GёmBszJɶq>4TjjIM4ZTeU?팶$qP,|L+krیnθv{*jPiS;}*-[驅O-xjeJtk3`ZxI9|V5J[5ǚz;eڝvK7}Jb;B5=qvɳw;c.s%'Gc5wvqd 4q$N*R^mAKKkF!qqqS514>]bg mqM_Gk alU G{}-$ĉ7XYbCų+q6'ΰΘoh܊cSQWycsyLc qJ1仺/G('NB苴Pk_Ϣca+[أI,~хVxScgx3&N\,U,;ơKűujOts|4?q8qZe8/t?rrbGaq2VM,o80n!7#{l0&g ,#U:V7b86u6hmqbtF.hkƫ.l6ƞ>1$*a<ε[ b"֌~&m<|ܢYV837 7/dCzrugB @cɍ)a9b1vrd=T_3\*WޭK6q+MqHv*b#v$_w-Ss ٻ}yߧ>VO )yi;xiK/%^/3hYbY5ߖK<+ q%ι랻_ϟ5zճsP_u[uߪUG0ɩ<Đ#>8\񯎏=8ljXXL˜O GJ^e/k ܐOgi=kh`~ sb`w}@~mbט*k4x7:N9ӰeDw7;q>E3aːOs."7Okj:yc8v3̏܏c<UygQk3 @#qz%zũ>1טM썓[gaԒ)zXZׯ,.~h祿=nPO{jEtwtEeq՗̫>ʔѕ!Em~Fv6wq2gH8㏇Fv-LR􂽈6(&'?k;iƤifCUg)h1)z,-gr$ⳲXD7rϺюYi Ē+8%K,-r匲wcֽb+ֽlvӚj6f==<1:,όg^9Zlfk5;M55]2gޞX+,J$ @3;K{Av$W`9j+;߬vfxEcv-vqӴu;OC /~U'FD_+ZܚX`k{u8nSW]8{ 17(/F@ozx| 1$n184nͭGs/X6FÈjEU v\>os,>'10q0mloca\~MP?0,ַc/}chA q{<WA=I|Ka|%Ah%>!:[TlcM=hf:57NYNׄ87ޏmuUq͈DK4=,Ebnđ6o=X%XF[5P~qHKk5vs%qX:18YM4%rM|E/E \XkΈ$N -E#4^aGF=ae+k خqBn<5Zl;d;E^>0E5yKm=mq=%XǕUwX(4!tt$3''7A]br\Ey+lr&mrZguyɦQyDMkL v};J?բ'(GUD+;Dsaߙ^ً\BST%Ԕ3G \K?.O37s?olNɡ.!e׼l:sF!#䤜rt787=Xay~ѥOlb\#\bs[I>]Näleo|J\aJ&9$=_PKr= 596'/>y&9= ,|,r'"rG=lF㋣Bh%r\3>70AML.d]6<;G.N7|UȗݓېGy4NsYCowv 3tض_q$C]ϐkW7M_ui/~ {VOΙ2w)sP(Fc%K,}9{ %uѿ+/} 5%rZWS\?eV*oWVŽ"iJ?엖[9>ģ8/r)ViWz|7|cwzmv梧hڳgƁW7\uUWM>c6^rvb˴| wf\wsTs[Kc@ҟQ5dw;ABÂےWU1ݛ/왏Nwk{0lLtH_C-[w-bι9trqy`d<5x/,귦<#;A|y7S( t6d'`< '>xټlBoV yoޗ2<9r:r1ms'ɍ\1"z/Ƀty~>cW >P>HvYlܞٟlIVD.sr5<فl>wfS..u(Z3W$[k<\L8Ph>zŦX5+k?P92r 5,*U=ZuOvLNt^:lY3 Gϟ~6k\K|R݂-ŏ|j_yk]^P_3q=etaS~/K/~TPS @9^+-:?[>&%( +S١WK,U$)%n]b*UR N7~Kwt4HLU9zA^ƓOa,CWs]G!q3rqFE<)S#,aS` Ta[MwDcw99x٧` CX\[T9'qy^vu^wLcGa%Db -fy ?{6'JV.9uA4CZTkfl}Yhm'ƣy=XMkLv֏˰JL)3oVζE u%Yqp@w jċ7z8EkFoGeKjx{j0fw[aPYB^Bc1#q^/ 5.ӺGo|X/c{(,0q?% ?1+T_Jܚe_KSMc,ΚĆD%a 3fG1]WM?p)U[J =x+EǢۼ/f2뙟?ۯ=^~|f\)5~bѐusĒ4,%D) پW-5UbɧqG=rK_z(wUZa%6/y$Y+|ܛ+/I%J-|҂7HDUQXd'PCs/{ܳ*yX1v⻺ݨMa_b!}ЗiOmڇxHKE qr[N<=b856Gm۩\ڬg9!Z͎ `o5#ǻ3w{k7CN!fV;+hL|wG,.vj1'fhWY8ʥ#w >t$t -$#(kSDxVq*qy~{C쿾s3]B[3brab72fKZUv% z :6#ވM̏܉7<͈7}'uIK xloITB<*z8Sͳ C4֊~Ή'7LŅFŕx<$bfZ/!u|O|?bNl%'h;D5e}:sbX"Vףċq qR}^|ubugaIKxƣ8 c5eS?>J)sJlM-yuaE1o5eAnl0L ڐpVJT:A5g6H. ~COËs _Ysأ\:U>@|_| {z~󣞟ެjʫ?z֭[/7GWD&*>ƩW'Mŏ[ŏՐF|k\-gic} N%$t U͋)7c/#FSmf$iZY][ܣW!N}-7#ݜ\&DӴ4vÙ}ssή;n|}oLvU8xi 1 nsgcSFhce !8Ӱ>͋|mcg}Lpq(b(w'~+&C{;v0X,n+]UqOiq;k/@ū<ь袵k,@ Fp(Qgla%lA^'cm,݂♸~ix9OqҒk) `^b)keԲ_H͠=Jxݍh+5+a%Lu*ʙx[b)4,GKhS%6D /[ALXd((GyiX5|H!M4;;_4`VY9^^Y]O֞Mżbm6nqy oS7n@Du<7b Y:64q8Sbub혨WqXEL|b7D'p].]G͉G;W)`~A-Ca ڍĊ<k;8H4S!7GߘK~g+;b% U͋avW<+`y+֎āt|bǘ[r8F#bDZEKF1x*q'b+&N|E`O{y(UnG; ~8ʉh]eD]Y5ڡO|0?^eژM1F0īѮr.+wҕ+q)1OG@w0__!%NqO[dUn).++Ƴv;Ӕ|Z*X+8NtbVU+Xݸ2^T]uyu+?CZXVpw=']?sYhᲵW3 O܅Qcgw+-: ש<{g~6)N>g/MiK3,ϥAW ז ]?J%!V G7bTXtƲUqwH~E,/3$zMy j`yqv/W +]\o` !hV2c/jyn:p;1x3z_yx1q~ځuUQDN݋Lu)ct0lv=7y7[$J;XK8̣`;oƚ2SG+/͵":'sӈ11ɭ,:ņT/҉>񺻊lX=tĖ6@u$O-UIXKtu+x+cČ(Ih~C-IsZ{am]c=F3Z(FX9FɸY_,=hKXZ+*m<t밵Wb_- Əx,MA`|.^'A\Z j=QƬʑ)66.$eºFdCmlbr `_9m7͈F8 5ݰ+WJw,iVe-|IX>x;N>j,-s18wSLD7V#$`=CiFx1:4hjkd}*f+wɼ0zƝ1n ޸p_quЮv^Mo7?c|K]_>jo}甿Mo E">-(hpʖ< DCװX0q}XL9she7mC<~]ov ʙ" r68q!!ল_&INE?bU) \!>n]XXX׮z>`x:j_RլEU#*cJ+ l캗mU[HQ{ |*` )g<:_{jȽwp*d+bLMU筺9:,v 59&wYdW|.t[zÂa_ r(2̓s CvNrnɽ,glK!Y^@0|MO@ol8Ơܤ W9!~L>FLύ쁹}~-13ɇ=9-ʀ:;B,wA_ 3WrDk?W#/ssyY~-ǣ{;1]Չ<8ɽpɹ895;cA˥.CFǻMd\ӳ>F^s;h1wWnR{f\\sS7xv=y~~#ovXMcH\E$UXF6ǩ:cۉ+hQ_rU׸IG1V!ޱvf{ݣjts~&:X7_"pK5o#s-ܡu׉Il@ }b_*+űS::V\\ո(X#~%P'D#⶘[Qؗ8Δ .bȻwҊR w܁4< bEdX`#t#*qxX)fS\S]{c0WeG=0e8qwtՈf3o9hxE>9XH|mF4s[]`+< Xǩj.qhllBj>ʼnŹKN 1(fIwcx88X,CcK&V!F}1h^_Q8#GSKRX̚wa|}?7teo[RXrLe[lI= :1-ɸi)TQtGU;x1vǴX/[r(v#NlM׉SʥX>\oXie{"cT_F͏ԼըqzTWޮ-6/0穹5sCF1菉]sΛfaj݇ o} {gl=9} da~7>•/\N_PfAMCBUERl~ /h8omy |k㼆7JCq<gm9?x?a>@e2_g, e`yT,-bK oxΙEdw4|ߙ/|y V{v߳>h7d>W-,n6gͦ?'?i;\ Ĥ&6x6,-V!WMb/kN4v10ޱqz4S6Ĭ#D*oy:>8nT-=I*5>qG!VP5#z1ľsB^Eb~Py/18;^11^X;ngq&5̏5om/ċ1E;`=KGe|whzۻ!cE;'!],]z(``c0=6?1^.uc|-p7Fb9fCcS`_a{&fxb-J􉧢ʞ06>_c8kK#G+=76dElLۋqqc4<=b/ɕNTZƹ*ZT QF6Mjo4ʬU0zڒ]g'Un y N9dJ?~ -A4 W^R lݵM_{ g7Ǽ>f%%%f=KŠ!<5AahvJ'蜲"go5??7ܷLHm2(l෫q[$4Lp*M>c,ć@l& V'nip!JMAC[!W9EN Dp߆ (2!:)Υ0SQ 2,e 2|I?Oqҏ76;Ћ%gqI~-Q9&$oXu>/o/=4oҦg7Yu?Xպ߮w-_h1p~26"9X=g}m`̏}A쎹19ifbTgqy%nWx38X>֡5v1Y zPYU>5S^ďQE5NK38C*bȑ*n ygHJV1/$XX6n?f|%ǩqX!>[pG4OlVܚ Gy8&VOz[wVy~r1Ub `.js8.뉃 p'yV3V,Z-}gIjJn|]/߫x5r!U*Tvҫjtկ1r0Wr܎|!7pn)/!:90~؄N㯱W[WpieEgrbmӺGsѵ8YڎNP=շ[j֮_:6D-"2PGzޠYݰ'Ayn1 Uꮪ5E}F[Wgܟ-ȃ)zMcN"c:%9נiٚ<(/)#1.l\,DgL$ɣT)CpqgdO1k<;uvM ( CADP `@@F`%J0$ $J Hwӹ=ٵVy}Y3̼/gu֭o> t'r ,}Z x|T1J|%df/2f ] |+R8HAD)>4H7DzT AnAz *) RVH*p@( 1tH$"}Pܼy,\Y.3N>vrpn޹Qnhm dC6tŞ){6/~9˩?TtlС8b]Lκ4Jquϱ;]KoWa n;QsL8o:G.Q\lYf/ y8ݭgAdv 1N ƨYh7;k+"ُ( +}G=l|K::'YS BE.T\:ܗ2ef˼.sY4gѲ7TPaCћge;zIQjwyߎ+ɆОpP{7aUsVOgg=[/`ls#f=L sę=˧| ^t7٦H'2۫ Nj&x3(b>_<s$xp45& WLmsZ3ȫ NQ;A`J <GfYj&y Z.^sq+ddݖ9kݱp'CΌ9Jׂ4-Z2xx ]l/e4w7~7ϽbQE]u0 ~Dž7TQ,jE(TxD̉'jAlҟrr%. Tqފ8o|ఒWA>fGD_`1N+]ްqnOYCj֠ Q񚷫. T5vhnv~Vb )@?ȤP#3d=(ddOmz]jo+'ĻKv+s尭`!O@W@F:p5|b3b@\CE`6F egI80_0`v 0N3WlsS W$hx3LB,8^U0fyl||uQ@wq C#M'_]4O;v;&f ЀYhq ЁQ|e'M,0c~Eb  N!Uh><߱I4LGhR@+g8Nj 2 7s,s=6n2@b7.Ёf;Ox})A+547eYZ/$cwx.Ԅ@ZQL ~ћ$ I2whL6m#?:Q*`[‹9%o ÃÿWgJ>Pxo_~Ygʞ,|1 ,hFqf,әt_؜ d,[q9䃸u>]d `U d*㠗JT&_Uh #TvnWh ~5Հuuߪ&"?%w!u۝ThH㚯깊^ ¡_P]@c=u:rIxa5TcȺy:>sZ qkukVMCYr걪Ǫf7>tC?;fJ)m\ڨ}߼7eH)}Rn:'e;@8;ܳ`]um֞_KPoX*>^tq6iʁ\ aRt?jnc y{}Kqdx)^es -ʃ-asV3?ʣ2f)1Q>1i940K^:q[O/`ln $mk2@zSb 0'1}lOzYn+cڕ:[D-׭  ܭS lYYcU ;͊9$|[;K6-x"fW@v:O#8Ta۵e;N#W[w,c4}bǜ/ʯpX=SV"{*n .a[CɛO8.?mo7e8\#\ ffyql0k\SAok^a53^yjod34`x0_z Us03-`LOn:`Ms1@g5{LSN GclQܬļffyܴ^i$afN.gq2d@_n@5Y@& Shf>0km&eYfY &*pyTjf=P5?e->TSŃ`*^&x BTݨ !jtuw7#0?^~ibnNǽ`j0rlm9M΅rï? v4yծZp# <K)^t0HgC;. ɿ+gWe~9fs]7wu_w^W} ;=_=CG`7Q0h:D׊u*WCEg낽) d>'A˗ .2dWd/3llKIJ`X@NLn{L~;X΀X(q`7%I_N R@.@fݙ*@< ddd=3+.g~ﰻQu2GvL7{/.PXagO8<~AUV[o}ۏoϹ,d!|{qVquc ^ȑY?"hc8V,?2m!,=;N_lCc*B `UJީn3p>Yaqg ]wkV%%mjq=+-=w\;9_N 4T=qO} Ace7IǤVIZEb{Sgp?tũR;^}UK3;x*ޫ IY!Cq5eCeBB5sjCce\ Q],{gAY(Y_[!{nYOç>*d yGAx|0Ĥ|`d8 d#wvXdI^IN=qSO/zmm[mY̶n{tAQaQaQB-hO[Wg9#XtfL8B(Z*rQOaeϭ@DőӈQ6'b̈wk ZcZ([ rhET8 ϥ7z }}χ^Ԃw61.KȧNPbZw9 gY*zCXKχP- r/-[rI'Ő8}qjSuhԡQo.SL2)wGAx@&&cڃ7T lS@ Ao!9zFqH=fҶC7k1 O_$$L ϋo^@r9@&r`L)nI-%Y*\D[*\EXNYyN*dZb\W:<(J{_DLY*d8ػh#/t L>A ޓr Ca7|b }{Eb[X WӃ|\A%"!wݚ?7U J!BV>mZzb5kWPKc"ΫP* myJ65y=nrrS:Y>jUZq+ jM6ޚSOm>57hUOZɱiiKRk[t5;Sδ^1?~eŮiӮK{ҎuSkפvII'5H.x HEf$Jv`/IRSf#ɲM}U>LR2Wf˭ z] r 'AbdLruǥ]C0'A~bTYrJLK79X -G@t0a`ʘdANyVrd-c/lo(xGQ0weS.'6{=DɉV9洁nPP:PFX ZFț<dCS3Ooxӷt~9V¯G.Z)  rifܬi(TАSG B}HF|T!h֍)378 =VEГ*pa>tSNg i{iw;Whfb\ݸ-M4n?߀&Oպ=> :PO@+.e -1F_=eAG짍,{4U&EЕ4 @gwߥ~W^ҭnkN:Ӓ%}4ZJߘcc}&c4`9hvud̗9,̷3>fU ?_3vk_?kPnYPfPٌ2 [AԆQ{3t{0*@2 ZHCW9l6 1VԖrkdIs)^`$L_!3`9R|2 ˘I& wKLf, A#cCx]v$< J򊫖T[r%deyUCAECᕅֆpTe`6Q`f0uoEz>UKO{nUKB%i%[g=ã>:razamw9; ?"DK3֝鉨 -q(5{-Znv w1.QHfJLMfha*|K}Kw~_!u)V8>AZu J̿wW4\8@ K|Hak՘,f hvIX*}p4֠YyϏ8fi[!ˆ~$PVԠrk4f\4zrL15_}iKk_艤JI*4-Ilz̟.=[oxo{xo%,iJYa45N΀F,w{A6\nohN&ds m1改GgCL!jUu{ z2;E]"a:YU9Js0h!IN{}'|%Yz T%)n%]K셒_AɤBoxp-`<)bp2@yr\FڛTE@9ls29h/HMhHlq_kůƢ+ZU7dVF_Үmnu;K{U+LqfgMl鵒irhM(Z 9iUBOgK}8=~0Y J!--R5wЦv?UfB!7+ԣ &iLnUIT;SQh4u 跆sZd~W!%ʊV >}|Y߯~+Y.X.X.Ɖ6e)^keԵL%>m7f-Y7mͷ CI5@7)F0J& s'/l4uAZ2DNCv+F4 ify Ѓ)>@n&H<q s/bQ$?MH]N/f1`Vdmcm+e.-~#<6p+% X*M䄬&^<+wgjTnۻkwݹ?'evi取?ZDo_}^l^l^lư"uC9i\6H/bnf*hUkch~]>qШ0\hA [UBb. ;?Ȫ)'*䣐Z;z]҇OoW)?Ĺ .k݀si0hYc.*܃6V,|N{=Tzy"jjԪ 7$˶ ~VfoRt21m 枔c*I7n5OSh @Y 0{L/`MԤg@Mrd6!Nb$8&# #03 K-˿z6]@ gY \B!2U1,'ӂ+Y,jٟvw:h?cSbwkL3t[O&|>gif*p|E5ܬ 8+EscգbmݬCDv_^nZo ZOAHV \;4(A5跸9 ygC;oF׹*͙i;@qTP(#Iլ$ecUЭ;tnɋ^<⡉#/=qKOTtөOU-Lh4IׂψJJ*vYGGr;~^ԋͽ^sw2&ě*|0;΄sœ2'%4L/ ( `Fq1%ح1lKS;J;,7M^\#urgةg:˄ˆ2OZ\rqӿ 7ص N.8~b쭳>yXcEj}uJ԰g1*ŦAG-chZE "jZVk8| _eURHT+rQA0G5-_~55MqAc uY e\nwit>) dlKCE+Z-~Bz,p/qՃqH&=r,>/*˪BnMw嶻\,Z($Js\l\5ϤN;ai\z\z\z15bjԈ Fm!ffiiikwFl. , , ,yvE0Mk^pn[VCEeeeECcxuxuxuqAhChChCu=Qs? KKK_x:t켌g=sW Bs1P@j+fh%*ΒV[WY׋h "sftwkGi4B-M!*nͶSF.KC{~+5 D?=.(U ԓp ZO!B(ݶ*T!hPWITѸL1 ke;VUZcʂ+UxoZYY8R8UA(b;T`h;>=fg"XSH>Z (ϺZ V.SvFg(Jw|U 9Lگuρd*f%]DՕ]kB-'Qr2+ 9O  kU 4C|F :kI?L>+-k¸0Z:iڨOr 8:<(gq]s)hǸ4mźuE7b{Mp()Dw݉n{۞0\O˶Jv'; )d'HRD1ߛN~G# Ky.b]ʛn~)xz|$;8% $'D\?Y#Kb4N &&_ BOp1.1An{bscs킚:'(0ʜ/=GǜPq8Vs0E?{h9+uYg=WqhQKM-uM7մ[ wn킏\e }(%H[7G*?[zաשDy?\ zhsoGƭq4?]VǠZ.9oҭDS7m{<.( 5"Rj)< FzOK4@g* G!m,] eסt ߅:4 b2~E i!5_ס Cﻍ/ ¸0. ¸0. ¸0.HIENDB`pommed-1.1/gpomme/themes/Tango/volume.png0000664000175000017500000027762410546031402020047 0ustar julienjulienPNG  IHDRLDbKGD pHYs oy vpAgtIDATxuTgjWqww' w5M kFV;=;sOrgfիVj8ٗ(WV\ gz6nz\ZZK{_Er1m|m8QP]VV3IQ[lQu|'˓'bU%d$ސ:FD_+^ۚg?ǥx$L%%Rst΋ꁈ8K#ӟjcذg/C%E֖Ж5ș#Ly*纆pyAf^x7">rK)>4&m+l\!4eRPz8$Kk Qy#nGoYzlѭAK5v~٠˞wMĞ >ar6N:AO =SθeG6 (뽦43o6ܰ`p8P쀢e 7d`̒pKΈЄgE>s [,{8)W:6fcGXEA0RyVg}'ptk3~lK`N^3fst I_ЯWӁD ~_x ^1kO $D|"h $ @/z/+. 4H Ks /?|!p%A0AVH!^Bª=wr=xS*76{0~-gVjn7B2ݖ,Cqu`?^$IƹhϏ8 np0Бd6/yq#Y[gQK$ʵE)IܰaZQj^6(0d`9gh3"@*?yrY)5@+i} =i6Ohf6 V:Z6F elB5RH:aPP2Q;5X7jp<'oVfuϞ?Kك}n KLykm_\ ? (BG͌Wr:5lѶǛpW =xsOXaOav](-ty֩}bAeOW:_I0`A*iw5V&i6.YWXW=jju+/s7O_Z6lXkuk]o͝X`H=ꕺ R nO} n_ܡ"W>nAFHx2?KښTK:f}Y䱄`3'2] رcO"XL3 ֻ2P-!KNۧVNʿ:Y*UuyIR9muӇx%yy!.[j#]}\3'-*^m?:憌2eHWuO Ao3ݜXd-ffZiG=#$C<5謩2~noǼ =G+yC5㠆:U#I4j\W@z&HHYp H((Ou2=s! 24kK>VZѺCLs:̭_n=.4TwkAj;ʁ Z Mz`3gK.E;@Iu~+1?Ew1c+BԛQe b@dDHNtOa HK!IN+HE*Fg-Ex9KE~ㅦrAsy.{278oKNЌ%f+hXHzcɽ)EFrT$Vc=D;7e(K$䈶=m`oKqL2u {#M"smwwSp9mu~ZUwj>0'gAWMڗ k4\zC&Нs h_g\ont.hy V-}A2} CwlMQJۂ:4ZɟC 㾂ɑ a·G!gԠUAzK(& 2 TȄ枔f9ygg>V]zu6S/mV!P|OVpY*+eit"q HEIM \BWbʔ)]/dI:/nyqUWRD@&owm+L#cFkI2C9"C=ϒT=vcJ5;eu04 ԯ$wJú,zFjJ}r:ZuC9z`7<Ӛ L2i]({A v%}/Z$=bL5}f97e7H4gZDae)n_Nld)E'ή K`Wݡ c1 llG@" ̼f}ԦB|"OيGq|Jh+'TB?vݛюv @:I;Tj:˲:kmAw(ճv&aNҬ9I5mzţ_bR}BK#k tG}G՟RWjtX{.yoBrCKYb`f̑]O&' <;DIwld'PBJ : 5 f+6fp*\dv)HmN5#8`! DŌƐYFٺAEK} 亐%V- ̙ZEWnt048M2}K蛧(Q1)XI+GH^%9Aof]ldc `Æd$1_mtB%*WZ Y{eݐ5 p1PG,&~}/ʿA☝1Aρ49*U]G(T*ӊ - {=Y*Aa9f Ye9 \۪۶A7 B_;ln7Ӡ'ބx[|0 oKϙk C AY՜שoV{DYR2/+ZtePB5 @Rv7w1xXQ͗5,p6߭?jq1U8 ͔gOp[6Li@B/<6 /8T! <{489dF1"G&G1)M1]Iw(ݡR S+PۧVZ}fEփZmV8@mڇmi-]چov~bVi =nYf4]vvՐQt7zK9l42O4VUJiг:Pcz(״3s>qP{xճ7mKw/WKQG{p<0 JFyd$+z{z %H85$[<'~'6 ئu7}@G >`sX[GBl ,\=[e~7f=9QHs.J}g6a6ueB |adi##x{UL4߀g.]`^5o(@]'sV1/cHLr^7|smU38f=i33&WBOҘfRui~ܭ^_]j0kJ2XjNhoaP@u|!S6;%sg,#\UO:'K=;UK?6"e'R?s,J+u' k;mI @_݆A @]ԏ0?/ =2{lCݟ{zI:4pk(>u: /8 D3NRqe>4* 8s8 Cne0[AjP,16 l`|&mQ/V\04 G ә$?zQTuͫti~@" $$ M#KL5mxݮеuǑPB@< r_Cצf;` #$a22]&/rטmOkjeES,ڜ@g ImRӖй,f)XY YC!\`L !XX()ⱔNZ|yvflS-9~ނϗ:{L}S+k0r[se5!BR-,G<@gfޘս5<"rp[K ij\_ |}fzZ{4| e|/o\$Ͳpy.|!ᛄ6<*h#]}@`:zzzleWwҵ@gWk=zPUA62qUbkaW!>nh#zc(@J1cjr.,m.[93d{ ,Y XYdZ5dq׿"dxdYX=d֌C|zWo/S:,,-2m@KVP~7i<G#_y5{i?_y||&5PrC} G,t=q0}8lXK%XH#X8ҦwY # CNsݧ_wW1 x(Fs()f<+,]Bks  #"?b]0$FCN>"xGeܢ)F1)O}fa.޶|R_r>vlT F?bvP%iqBdWŎo2X'_8?㪦!rKj30c/GrTjC0;Dȱ6O%ط40/w &-(l@s0s8PģU_+:/uqDՄrŧU$ t&h.Fb@[:` Ձo,@j:@i0 x.'e=D:ڄ=rNe=-Hȟ-}k&1%n,\\t"8fۿF}#d(ub1wA_zWS+22x (ɘ@$I.<Cڈd^ƃxm#U 0ced2pYeq1.5|,dQ͸2-AoJ\Ak K@fxvt3K-9rL.~ "Dn3^vHnd#D8'W܀ 8Om5|#S]H1c7|)_;f+o ׃`7-?CgҌ1FgGDi '>6HfG=0/4H uVl"4sn)<7Qᖽ^yC 0>l8b/=w]E5hu psա` U=Y^ b-@GQH-)&e!@R$\y 䥑mR8 )lc'`a) S"GY&8̥֙57S Ta~HnR'%?揋;G z,]b,atlhcN&Е"g)zq_CW7v3 ؗx|#)~),1h+ qIϲN:Fn*>+`˙c|g't25t)f=z-Ԇ젊'̤.Z%.8 $8.Anw`/-^Qž-%u-C,`.UuZA{H)L0]x,Cx@m(Z[eݫ'5<"ݏ{9,]9E[vL8ּԃ@!mE.ZsJ]){ -켼ޓpݼG'ƗFJZϫ \X.XM~SQRL7 2Ar^Ne!AYYղ' @  @^L^L@!K!쐗@'6 'tfASE1߀5DqPRRlm]rA@>Ǻ"DL{K(2F^H|lW弾쮭l@~tW]YOŁ"(Os&@ץ:7FcLYgu`5cx, 'Src3OddAƀ^vA p rpm0V4d%cXmxQA('#r`T28 m;`؍֧g]qpml{i䖊`e 2:CBJD/%w&N D<c+k (|:Hlidrl5W32oh|A[=zsi>1gvluYϻt]N> C:wuRx+jeF|@ K1 je_hj?wEdnbܟTs.m^HZ $0_'ɷYyG}7:)yh99=t>r;ص+ x2zjMޭ\{Ž-=e6{(nƎw=7Oת"VNq<Řq_ sR13ٺc}fx -4ڼdOV7J0}BZٙ%'I '<<0eWT xvҼAYVڌAV}#8x 'ǟ9 ;7~w$L|$LK&ϟ=N~KxDYEA3M +d/+䦑EnqG@"D[>[@6F Ͳ !Q6F#+r[m 3 ҇Uz+A3<@PGHWMjNp?NՒz -a@I>3YtH]ܞ(G% -LX+ Yj0ۿ0S̕=U׃V%^Bҭ$dxXQ' "6O o<sU[ɚt׌@{lOˣFmם_O|RnFۻ<_ܐ}X1[ 7,X8{當wk rڤhH~+ltUfoN2 ^ᓞg} Gԫ_:n?kAqC<$yPJg#eN"Wn[~N">>Z~Ni:w)Q.d1{ e mr` 2hS|gyW= ro|!ܥ4|C}ZeVP~i:bgL%\3eUW| ݷ<#& K@Uokq4ϡ]|qނi Mϔ$=FxCWAa]A3jN ڎzJ-hhWЯY!<<ŰsB耰aih|d _}c ,ZQYhenJōT s)$T'9 c9+Y0rH2!l5r XZ:+ @BeAE%@1Y-dՁx#HyJ] R%?v`L'zKspb6@K@7֖wW\41ܬ@/в:O/c$H50/h3IUyo9!+x3wc#?Pxگ*7a:ogu)Ǖ@SS#E>q u$"PLuQnn+_bE0j__,s=ά L)E=/;ߴ+$q |"FԎ|-hUqk}Ǔ?Oݐt{G2Ζi 8.my,EJ{,u((?fs]?!aCn<#$:0-HJsmpi/X:#q?."ލ%!KsîNh5ZUkۻB ,'?i dۈ洦ͳP,qDBC54*hvNKGp>vڏ@(#|0PKR ^AKԛ t¼G;iAXz`oӃ1&Bxt`2AoZ%xw,qycp޸m9!9ClF \ HV^Y.  *s+O\@$S6Yss *d.3d=/ XƗ v‑|A{L ``b^@> W:^!; z}h`D<=VyxK/^ނً( C~ xX@3@6ihL5Zn4]8z ߃f%!yJ`q'Md6"Ԍ> Bt #ug1\r@T++(5,߸̄Y²ݤgpqO-+Wݜzl4rHVF"7IΗz,䤌Fgme= 'n(NY-UVeyD|yDFh  !dR߱G+˛"*G^(  \ Y㡳521Ib.тzu-PQ\ ZRX|4PֻNe^q`Tf~.2rK[3_ޭ?!3=H8҃MO9,M\B&[>{OON3_V}?p`nokg ԦXp2jp>Fk&%ZZ{X6Z:Y--{p{ T{){8$Nt s GBHm:>u F5:H/+{?[)_)kyokZoveOIҹ>?!zo1_a44=p53$otAYt[$%hWk_Њ dc'UԂ#Y[`|f|iT"O]JVp<8W|qB6It`d$aMT2R β CK`tb d4C:\r \ %j9A( 嬴j{e J, qD(F1 9-Ab`+ytH %9 Ου0€M  ,@w@< :x;[«c q %$Hؔ'a/NwO;Z1fcmhoV.KwFP6`Z4b 9$QfH/4p <l2]+?g%RcGd_|/sS^͎Nol?a-WR&mшiiw<.vFڤNo"6:%*iE򃶡LOԀ:ѡ -Q2{ ZXk K,0xq8H7mr_R "I0FH{ AJ[ 2h'@ZI%i҅$  $$䬸\S ;% 9%IKmHK}"y#@]/Q>_p k嬜V2q@Npd2RJ2|T4M4`ѥHL_\.7ppA>p:xY.\V@`k~ɋ]Rj!mWSN h' p̄s Öi+;-=0la|\)$APo5_]+⷇ݿz^^ F}Ą9$m>|n"9>ď8-#fjOm¨;p>jwq@mo6R"$/ kB%@ x*Cu:G,_DNYfA z@^k?|6 @]w 2=],.X"Ɍ;pg--;yc <'{>y^t&X[Dț;O< p Plll \ g-}[6 x=oE!=?v hCgK]6i_VѪlS~ӗ* `|lr;5uG0@z" xN/ @%t!Gxogr䀛nw[~2iS-r&`aoknB 4`)W ͨ,@K[i,m$ #$XH0H I`t5*]A|I[$@i & E&S U[`ܑ U2]ZdI,e3V 'dHSr(/?<^(!-hR'2[w091]~v}#C5N~ %3u0[?Pg u[[^xy M`@[اwi`PNO\c6Y@Ҥ b[DJ9`ZuP4I9 ?ثUY==E5wJ WYjVuIvGesT!mK/_ CI-͗:a9B_8ֺ-rE`nono  RW}<|s*X)lllau0 RUg.Dń`v j:@ !Z4f$V3bOqj\V0A`[\FX"#7MR=WY:z+N`FKGɚ3A:H[i bHkyh(@q 9%^A } Xò\:Yl/JOm9(o 5X'e=20X*7VYKJU["]Pk{%y&:Z&6>i>~\h7 pYi'">بx^oK!FJ\,jJ]fë^s\r~ ||Jy 3Q\Rt0!^3{g}9:JAbWG8vg!7(<y‹Ru[ `_R4f|`h<WP@8pgV/}%2<* zV׺󬽭%Hs`i-c*j 5@_]cꓑcvfԗ?tJ ksxGsg#\uKڒɀI*m.-cl?R=WA,A A$A[Kϻ; fT 5r >2Y&פM&@enVdf`] w̗$;yf4G}Jq#BJ=M<5^J$>g?@]LA5e Q= zUI#:X'H.֎k  H\/~y=K(YᢧH>e8t%A#AjSV|:`h"de,R[ `<3+XV R\ta糗UYϼvBLǵcdy(D)$M oe^2ЁAtY-O[u5Fk3G0wt;Hw*td)eG Co\v[?1lOlG,l>?t;on3z-qW p2x]Ș hQͫ!hdQ(xb||"iΐ3 (@JK))&T>e^|kxuuo ft-zfL2\n-A@uK `%a4ĝGCtQS|uR!HdO=:T+@JiAiV} :Ki3_ 翑?OI}}kP}gυL6Qc&c#{vϻeB<%_-Nvy%@J$`AckAeEz?=(;@Htk# J,0d!HW(A J C eTYހ4XbAvD.7I5of,RVS@_[) 9.AvH +5H"+Y ,x< a'PiK0= 4@]&7L}A$VD Uij9q N4t!OK32C_;HI=IE58eI<,D=c L (-x?OkN1FWII^#ʵ;2䕿٧Y{Z_nJ-_)ME< "-*H h Û R@r<v'~h<1c11 䁄#07=9Mɢ?-i{ aFB^^Ա>jU 5JAjB{wtU&s%(b^?zzZ='m"*P@wy Ӫ46&- m^ָ̊(fcd$IrJ $KlN`)t`5`F Q6:ԖbKG5 mti+Y%+d~ǿB%* d~cS|.CynF]tYD&/>/`]<8hFGs ~z]7l XY[`el iG1OVd4 TdKO`i #F %H_|A5{jҟ # F|-$#mآƲPlHk0$&m e6Fҁ,n.df'@@=/sZUЕ҇Q9AHg 8~6a0|qk@p䅼E"VGB|ÁVzGi(=AU5un$I enG D| FVB~ ?q0[>ܫ5+`3[,/Xy6 8r˼?qp/Ok>]Zۥޱzbㅎ..ջ RB2"۱XGNjVulh o.+ԥXAMe@*-&D.m,[Cq`Pi/Ir&7L` id/zϜaDSi.O#^Hf>/](/GKy9fuf~R?X2t9mJxȸƷ .RR*ؼxYT`ݶZӎv})@iq|m5˚p^B# \|2I>AɃ!ˈ~zA-q\[9 <π*Rp RR+;Pb-MT7y8ǧ!ӿ4$'9Yۿ@MkAF[ `HT+i8~LF FAT,d)R]^Ku| ͌v $YJ2?- #ti}JKeӟMp5 wץIZ]prYHrHsdl w@]VS+Y @y~( </@*+Q2@_TR!xC3. N v6BWx3} CwtBh/PWH \6k?2g`un¥Z_-f-s9d`"E% O|'}-U`qDƁdA`3rQx0,U@K; L F;Q MO +=t#hc 4Lb$I`,5@bFac1 Ex8kq^=0n7'8glqK@P?vRRJԐd %-%2퉇y +Yь $x2U$?1ďy-@5=+uA $7ITGws>cRy۬e3e,5 NX!Ԧ)%!"qπpV^W|Lo;[~9pc)7C; Fr[KR*TUr r@TKֽK 7Vn{_r\.Ec=?dѱ i1F.ki>9"_pEhd_H:A!LvOf*x Jmlefp>2Q[?IqZ6?Z0ۚɜ޽ӶM@~]J$2}y !9M=PeZSolo $;I/v |g R_kd[- &lMڝ׿(C +Uny!u}}>PbxX20Z]vPhcӅrgk$h\xtq,Lb35#r%:\[k?>1O/k{^d󉣉KHKdL dQr: #eh/EQ0; LH3l` lTJ$mM|< -VF%HTO jR{3 @GZ\{! dl eel e3ՁԔ dـi;PJ? E b(PZ=+|.ƙ M 2JIiH3IpB42Z,-(x7AwUq`p4:M rVA7Nԓ d 0OV $H F:=E 6G2"~t}z_5kgdU{?U<18V:2UR󂌒Q2t^Jkwe|+gmE3izj֡:EUZkc2XNWEA{Y*pX.%[Cߴsb^y2@.~P&w!-=i۔ڒ@KU)}xWOhl߰Qu۽Y\$͒ $^gA|6~'y qL{ĞH lyӿ)u*DE`YGKRLЙTRIQ]!((W&2Yw 4wݨZZK'XZ`5KeW)D hbySXXOޭ i ? m[Ngڂq&"UZR:!nAlŸNpӋS.ww7h6ͮK9mkoPXJ3'}^חA٫:{]+ieVy(\ձpSytzJ;d(md v A ݤt& tՑ`:Jght/3Sfhn C}Gi)-t|4 fy MISLGs)$d0H i-OdJ,+& @Ho>ϼLNڼ fcv9iNߜ6{Aޕw15hmnq#}|j>5@e,4߂,2d Ke,y[6G@^WLY0[  BbjTflMf[,Y.M2$$c4+e\k^u0e3{;{[AjAJo :lCt~x Kߜv$T b1sA3?Y] )).y &uc2n\w zu~u~8Pga?L~l-hqs&'#1jy;rxI(%i Yϛ6uNd68(/!{'(AqR:!43yuk-+y=NPJ%Β} cَގ,u.z&֯G<)U>>caR3*>eo=gu&H i AkkmzEwd8~g9w pg/a TVB{i8m:h^Q%rC٣G&i 'Aj%ߡߙ'0~􆴏g׮_+ cSӆe>78[!2@GfH4x:+u@L u%B2Hk R=4< oڙv 4FHkN. i ~$bH3f 4b:YgtP`&ilְV5!@x/@c q'Q@BAb3zF~gq,d,ge0h3m3̔%$]u@5 OF::hsm,r>tF@3Q7"VBbIGO諐0_'Cc+dZ X[A^1c's r@~rR0̫V4&  2M9V2ϿϟÏpZWJ^HJg27ª3}mm4MezH_|wZst*DJi"TWW:-UX) *=k9<{N߷?:I'I# y)mI\K:27Y{PrW+Eme$p1 qz@[ ͼm`gM_%\Mu e:[|xk@}id 4.q>rg@8'}(?g:ZtHڜkXEMjV -~I{vu}~>&80~ś 8{AQ_r,` Ӵ\p@]e3眖3? ^4Y?j@?o7;gII {}0],0L=HsikzVG g\j Ǥi.S9=+@$DyN K,i#Mf/@_ځܐ&L{4i++$H +.GcA~+I(QI tS;4Rl4Y A=,(tcbu cAjKm:1-ntpC#_01Et'-xR]@ 3,&.G :@}E}+6Y$355慰HBjԙ!T :)=ӬY)ʓR67 "g>|d !a--0S=} > =l`VSVaO ֧lWkL+OY9r8 :-@a%V湙|E>JJ~ wF$qR>H8"yK䠴d|xo/mHN7gijx,9):>\rbiJ?9`|9*9*t [}x'Uzkc S.e_2Q *%!;lq&< !:(CJ3A_9\$o u m' @r-Fq+u%5@j]<涎Tw.D^6=H | L$INtf|Mm2j~!fxt}\ʐ膔SL,+\N|{Spv&gSni;iK&oR>*p 4`fhJ^Mwxd U={`.dnPlCOKq"qv1ܢLݮ+td: s/c2tu{0-ٮ!C%дiwۤE''# k;OT)RXژd`';鷮X"NЙ,@ 'c,M?D|TTߞnPpHҁxHGlSSG6=t HiO{/'(O]a)L=Cz=iHT6,Rș5 ,ZPoif@S4ЙzC% %ʽ7{O?8E|1(@į_*ӭL2\Ev- \:F< @!Sl7歛7>g[ 3>﻽AY$!\ ;S[JmER<)gq0irJZIsrF~Ԕ gd9#M @ u_PI4;}G4-e_h ܒ Piz 4$A%\f X (0yd v(||ȇ 5f4Mxߛ=:qNg:&? e(/~d E:4M3UլOhoM_3"V)=췐<.dW"]7W :*) &4ّm".,XI}K7I*S1g -=ߏp, }S.{oqPZ d3 2kZnvq<Pi !Sn2@Nb|NzjFe†r,C 3奓H5mG>VO wzU.2v^XB>"B%r'0X/kv_ЋfY'H]""g{C(vXByqAWBz%d"Ѕ;{ ypn&wީ z[$TE(BЗ.)SG-c٦]={1vU.z_CRgf){{8__yRnv׸Knԇf׃r2o?"D=*j+hEEzvcC' Cғ4. xM t ol RBAH):MwKzmr F|䲩*@|AKs$Io"Li'pL}i%9oZ m)>y4HDcj 4yNI=0MsL4 v:B5& `ꚺ2x$IyRvAHzfo tI>{/XS.:y2I&$m`: ty d{pPM_lAd:Gź.b{,EnԍpGu3 @nrdFCDӾ{L=_П [R*QDOЩ:D af'fճ?E 񱧙KJ,] t) n-otپ7q\̗Y\?š=P3uu'd^xUhI*r>R}'I~s hB[Pc*]zD%(}F:22Y 'sAH;~+?̙ݼ\(wåK6)p9P5:NsZ]>ў)K IqJ /ߟu)vn4rHneDzR/EO*@(RBAR&_x ](R54@@@GГ#dI \yNN2W 2$8ڱK 1P һȓg|Þ@|CxzeUnA9Vk g@jGfcAZ)pg @?ңXd@!jg䇑u.]VJK <0t8ЎKMd4ڦXI~=$r$Z db*rAxt7%(u@ڛҦ(&;ӗ޲I6t B>)>Hf(4@JJIi f6A+ ceDIT, A@[\6 A _h;ԨK]hMhLrW[.%C nԍdL{tA  He,@k{\ !=A;i's3)[,N%4>n94]b:K~o< zvM@fI"0 gj9-4"kEriAyO= zP*wz-Zۄ퀇$pL?g"G|IΘZnm?HiI/]<yv`G(ে4&_P(i3 B]@ALh?nq; /" 'X 3 "]#AJA ArAlyR6!4@y(AbBi*t9ox{*zր0ALgNՓ:h3m#>3\AXvJףoHE4{V/9EӼpIDATOq/~4%y7nc6I92~\ԛmnwy&FxUFMJgت W)5Y?#> qBf09q"@`:elBJLv[#b)@-G aڄՆEO*FN634.@)x׹?Z>m=@)@Gev]0N'Mgn)ߟ8lpۣJV%2;6<5b"&EPd,+;>!\2Vjm>m+ 1Cݘ*,gx7H<;4qEG.d}Y}6্!d$R? ׋!I)@}wڃjh 0()@ejIr$ZH #W@%EA2B10u%^ 8i%@:Jfs"E\?#wgH%GjFCKv>ؑ m7MsC`z`\nYHo.N[2 p*s`7]7=C;u oRdLi-~!/4ѿPH2M]t0\ 94' AGKw.ЎQ;3L1@jS0-L s]Cxa|) 6֖zQH/a}''c"@2x|%3`=dOc љ:G g)O2Sb@}r d̤n>"u)yd-d!LΪY۟}vx˙΂LVlI'3ԾԒRUv8rA&qBd#7HJL@3^ж!79Mp".I>)#?tf=thL-(ISHv`jnhE3Q%ELޗI[2I$Aq㾇r.9 R*Xҩ@ s.;tPQQ ,Ln举dmŸ{*p}+tDL<5|/A@aANo"?#G}y_,%3pH׸&@r:8ؠ̒Y2 T >!6 4;rG9^[( eaF:O< Do.O)y:z6cuNҮ+]3ތnV!|xz;, Lr1|$H~!} .>XGa9s8An9&e\>z@VŹ ߸oKׯ5׿|q Sa;guåT4vp_ W\'U4/:c 7ExGOPMwH4ozfq.?^r^"zvt/H NkhT_>ō%oXWl\)DD?q 8M>8܈iqָ, p[ dbć`Ӄv>b"><9=m IT&@,t3A4J@c5F+'34Ia}u}]9 iiӞiU_iYЁ:Bl9CWikGM~59욛R(Ιd"d)% GK9N$^y D. _fй:Ye;kO_>{.7TֽҖ0^Ҁ+QN7'pWF>sF \*K@R IRQEddWLOóQrO%럯o':/ȫH^?%(#d.s `^1 bޯNoC}o-)#N 8l-fK$3@pJ BBwCgG`[Mn ,2]ug}Ia!"SxjpJ: 'Lk.s_q2_{&SBDjȁ /Wovk[o'tn#qcFo&~ ҄ Շd7Jp,V*}@N>I?CZsA.AxK9&HIf rUA.KtC@&G@$4O%#Yd ?6L9g & xVUZ(N {@m&;N.fY&Iv/Қ;#F_ZXM l=H$1T t'sdL +~eLbd sPQ~%T ]n@Й:UglOd~{YU/rRNʅ&fլ>tnnv]`Ye#k=I>ց:.HwZ8C94T5jtY! 8Ȋ i@L{ZS1$Ґk&4C^ǥc V3Y@h^Fi{./)u }h$Oq91p'?94$KjZk7+;tnTk+!tGkgzßҌ]8ggL?ѣgwfz_ zI\%86Ju5nP CAbƢpI7IN s+@`\fK M@in$~owBs"; hFWN$r%خeX(x "DĆ&jA|x7[߁&Mno}[8_8 C S2l{PBOP nE+h +ס6dD H#i33d@ - R@R$Hf"A<*+% $l% s%d)*g ZA.u"AMJe"ڂ)gL44cF҆=qzl;Fu\ |`'=࢜D`4 :Y'6\M]t: n=^|gd= 3D;YN ke%kt0Y04 +UCză FayAV%Y:u: ZVZLQ tPA<92@;N&v[I֯k~;qf\>f looKV ' /A^砸n%{8}acAqr:@j+iQe9, ccس'|Հ -xɬgƽm VgǃK{OM^vgld$lEO1Y4+nU?NR|B9~2MUc#I_&SRy{b@EWKՓGvM@@8fnB$/w>H+Kdd%-ui!4_nCv$xsOiX^0H3B/p: Mm;sxӝy%Xx@i"5 u,2wAqpL LyN7Ґx6%Lfc:v^X_R) 616cdx~و..J!Z?M7k ݓv,b`La5I~Ј.o<$dDm]{|WPSVvh١@0m DK&ytp: @ ]#+6.%t.km-vg̔)'8c=K`${le;k@dtiir.H8AT/g9AG *Da{#m=dh"`I3&.@{ sy@'J'80Ǚ(#CD8qඞ6TvR|"GړEXE@iiHӀ\&om ZY|0L!t2]t2L'Zz u~gs]K 6ѽsk.^Y`^}m t+ޣ4P4TRO2sg*_gG{{$Pg?'(ƪD I&IfQd8Er'/֔^\I{gz^,h%QJY. qSߢ=pEnvD6فc%I~"KN :rFddkм!9%i$?_/8e~AEQa m dxR@WFuЬ:JG+u$-l/Q()O)WS&'[խ)*̿,J@)v'/ ®y}[-BgZs9o۞Z׮Oc;@\q2{w}]h@ Siy#=ځZ9F R[ !=G{< diw1 |"#@&Y]jHv(IANKd)~yc &_L & _γ\x;{ys<={{NS' Ff%|/X]dO^ʓ&h"YfG-`G8-\s9gl30͚g`:1/l7MV0BNbbp{FwNC!3χa@>S55*Y*< FwNʑ 8$p@4Q3H$iО@].=t9H[]/mAH Ch NfIœ@# 2`إAG~T2 ~ۗf34"OeLw6@8n- dd2I7|]@"xfxK{ +BT`!HFmCy- qXe7@fku t9  LNz$Tfcԗ!Kl,>=#ZEYw{źm>́OnI+"?D*UʔA v#VapoA{(S2N'ҝڏ5֤fDב's e+?]: }Q_m# flBfEJ`I2pcVIZL :7Բi%Rg@2 JI$J-_x_$۹!Inp9WwA7=v.v] 9`PJAELzB7lFXLp Hr.vӀx @@4g72PH?|!AVVY dIb&¾$ gwʋ%0߿IKJ 2w-laUey 3 t}6gvнz/0n^S6^7=nJiu_۟5&>pkz<:ڀ{4nIж/ R )"HPh|5X'G\5_U$>\=HNUJ'@M*IyrFAdBdÈ9[ HfoY3ޤ3QY;iHnn=0{[l<$psN lߩW':Pꟈs=E繜4'o%!sCR 4ڔXAn8~ E ԣ氷.s(\"z;sё|Yͦ1:Qo }[qs5CuuyXZR#5;+M_ ]p.8gȐ/L$!<1Z~;*9Mʠk5puAh! sKR }o X@0xRXҁDvu>#e  ;4=iS@@@44My+#;C v] r{JZ%= l`!PX_ HSyZõ1 E(.H @Mj~'\}sUw07lhu`)(/@AWb%E ^3K@2{r| wd&``JfHSżO)gxzx<--ik~_`Zn47)lޔ1A:J_BK 5!dH),e1 )0p6H.yZ?dAv)!hJaX^Oe AY rr<:d&XV-˵%ˁd %_藠.iH֔֠]O><؇}`ZM ˴]ŀi-9%(td12=i5utP Σ$LBR6k=ȯQkG^>SE}'T&I yN [dpo78c5U*4[L/&xRWnrFvS$)5vs`5 r-M&0 gd mqڑrR[t\ŸO@e>GPw1fff#4,7 6Q&hJ,A6r_w4 yehdjtH"}ԍ ~LOv@J)!g] ΡYv-G `{0MSg4I@`@#V}M_$Ѐz,6ue2D'}+={k̸,)Dj=^$G)XO,)<%)m7uDocC!y +,XjnYR q !Y<4gg = >沝TZDEk3Sn(|O`d?[@] v-&m_q Ybr$oz!nD]ԑm4]VЛ3Qǝ m'f@O!`xT^ 朙d::Fs@ ,+G?M%FڋJ~;|Ƿ:8Y^}\;B`sVhQ`sxUg7@c4#}t% #)A0?~d'pЗu.t֌yF"Y&H`T +A" ; BQ+gS8Ez$I N'Y9 6/^" Bܚp:Oﱄֹ3eڎNқ?V)R[aЕ, {#Yi X'6AP?RfP-8/ u ,@yXɮcS.0xۧ_'BPOn,yɼ"I>'8L@ke bC@vx 2 :Rh+2H1_AY#+'ܒi{ 5I&ġ$Y8Yth3t#aGڰ&T'g)J+2X3x-IQ7I 46 ݜAzѿ[DҜlg W:,lUaz?L)=u L&E0=A`/8DGވzGoiQЅE?!Sxln~ Y7&Z[OO :Y_'' 4%@{0f#TpXES̎q?FV1`_Y]u'U8V#ɠwv0&`6 `k .MsApz+F5V"Z >d[>kۃnAR,I eAY'kA2 bABgN6sIR Z8PKGR ]$Fgvs]oo{@@/5[–%Vw-d ن/ W]mO{^ͨ#-h{m55TgЕ bQtF;T a:hY!={Zw8SLXd~ 'j`|!M@&?hDf0t INh] )tЗ@itSZ 7iOеյ`R@>C6-LkK0M Df DpsҚW0:fJM($ЍկV3R&>|dC_4\:{y2?ߤJ:`i` $il&O6!d7Lu7),3K6TH#Ke)xö a%^$DƑ5,H:@"X3֌="C4oׁsԃ`S4X B.R>|5/{(7) A=4N7kZP$[H% (_`u=U'8L,hxCg$ 6^ ; dYj[,aڑicTt(f o ʫEЗVZ `6 a A!i,0IbeXKl`M=Dvfͧ4آvwi{j/ `Oo p{3 3-"(lnWms= 5Z {ܯM.t`K; {ֵu@UWﵒ~>OVԊZ43Ay'jvh8@W.-Io}.YŔQ`5 sB$pC,0ϥ ,@~!:ѿ]g`dNWye'HuL!gN1SAUZԠj!Co`Z7؅.!->&Ě- ekҀ hQ7l%$rrѺ Gx  kJ6?^%.oSQ ng%Zc\O C?0FV@ V(!B8g10r?+;EZ"yZ~%&1 l'\N!*=jV<4Ք% )>I EywpDgI# G9-߃g7{0hEt}N][7͍w@+ i'ڈV\*c"y ĝ!IbߴtҌx]KXLS`Гd%3P^z(M{B6ig`q0"@wZ}$ ,dц@e*sNA}:{=݌- e.=A*^ \"eTQEA8AvI+Yo(ZFږsWl`kFMh~r]B9~fO9jJvul-v} k A+GwѦMZ`ڹ6#+mf;6Ԇ a~I6U.z =:Y؛ntfNYc0;@`l_@*]yzbC5Ah="e6֠$2{HTe x0mth#H_]a: Эv Sd: ;ݮ|R}I^2@NJCe]),U `V٫Ga+`S'@i9T"#wNks&槤:Ds2MU QҦ(iX,A`(Z ྜPڞ -GLGҹK tXc1q韤 dI,>]M 9nH+slߔRh? PE"`UL>@3DN( QӶ![HM s}5Q=a rm,02~ mvgm( D[R`vծxv4pS.|XLՖl,@m}Ӡ#W!P]k~74'h ;~t348e}(px@1AVRܒv`׼ S} zz ґ I$@:Y ߑlVҞ`׸Clc)5n{э7-e@Fx񃾡cne[8rZ1?om<J!?o, ~+`3m<} fn6Zks` [^ vi>9e?Q$40=I! ,e(*Y-A6P:A01"02D;XH3(>69S Do :P Ҙp"6D1A8ô6-@e}DicZ6`WsԮSN7R)M [C6"f\"QV1H`#X |`dd hQF^mm- 'q@P4EGA;s{ :ݟٛ@^u*tTC(qAIy?= [J;t7WÉsnCiɢc>98?v~H7|sy_P'5 SqrL.o"ʳx0dnwUu8Te(b= Lz$o˫*8y=}[f҇z`u X]e@ʓ*l/}(h7XDFifw=c=)\M@o /hOi `f a &u9 x0~A=  h5muwbfN8N PRd}I_A 6,%>f9 `j "Yft9FG*kd b# R$&kpk^<-nsppyhX`Re/VctM`&^f HE3`1: p7} EnKn.tp[-9i{^{޵y5Vﺩ޶ Q{r:I/9,IsFl:T|:̔dj( |D:@l"CL՝tFY &ݥ; iA_!0Mc6]g? |Ikv#M*m4;XGT|!դ9Є4>6IW>}[?ׁxπƠ\cQLyEJNNٕX(5df9}uJ5q8QHד")F?USl\зsB!3T)p5"msY_ч)`0\&7c߰sYW~A.mq VhC7kzWּ^ 4oۃ- Ҟ\$% zHo_5S:T@YKcG@rX DL4K;@+rVim.c7A t\=^Ї"؊꫔A :Pn$}@P BG\%xuH=& `tJ:ԕ ] ))L92 d 6$|h).OHil @k)6 ݅XhΒ-lTaZC;~䣗rdo@{nc;ܹ [!$P. tqk޽.c_))6nGc7 [γ}U3i mo l vc?_SoatS fV9COz,?< N8#T/u#:6VtfԌ BϟK5Zγ@ǚ1f J='. # >h'rlGtt Fv#CyJn@/?@G: 3Al;d@&L+:eO(%hNF%V@}@+&#g#~ e@Ghk 4@@:H߰G hw |#(r[ 5- Kf!Hmi#@'+)%@"ygA1l;B_!{18m:]?>:A$$sV/lb0EzBZv;z6;p3JmW4d&+ |@Z5L]g,mmf6!m@.K~ rO`S 0݁\=x.8EK=(O-j=r+tWes3ylIBm,Aqhv/=nm2e>It)hg] (.&|-^|Pi A>rH-e E2N1wT^ʋkhxaw,u<^:NZ\s]eNc/>ЖW;@`ZCЎv'A: l5h~@o]:(,w) TҐS/#\.b-@f,3,= L&1@@')f5軼o# =My<$OMW$;Q5KF[r`lCH4vYq 7g`N!)/SԒvS,wxd"Y) 4^ h'W*'%1 :@V*Yg L`"h~wtsdPdɒ (dQJ$JDH9vg~s^^~<Ӝ革.b΀ky`h Hfѯ@cL#fS #v]8#Jw`ive2vop9㜵XTγ: Nq}L) &֩hIqndL,ȴU8kZYl˕`HL@& "d P}C+rTN. hR x#?eli,@jf0KJHqFVi*{R ?YGƑ 1D@O$dt #C V*X S x`"(`,[Cp9Ýu@E(f<9P.uIV%7Ҏ I$*^9H@^@Ew7P*)#\AOv'aMOpji $H<#KOhn}|Q5Q@&n &x@jw({}M~? Re@kVS24LeYACF \k2u> ] ~FQСpD)'㴹9M"pFVr1DO{+ud+yyQ6a@01<0 ;?`RrT˗ |[zLVyA3L)vv <xr{8n]ΰ9~yNUg3N18MlNSp N!05 )~;kL`K#d$Y^rQ.\%+",5 e4'X3I$<Z\s5껠,>fչ`uftYY{:K )ff1bc)f3@ @JSzJ!IqoC3X=)4URB7ZHp;Zh;il @y9r#_bX6:= NxMiaf< 0'5RYYb F%8W;yd^=Jgʋde  c2Rzܓ& kVR`*)~Z,+>htJ?t%kW4F1R{ÇOYyk/ lûJu>f$m%A'j#I;zE@G+Kr& mN' KHf80G/ YVt.%X X rc3YM]`}gݴNG8FBz_ia|ZS`"X0Ƥ>$d׎`u NceGƮZk{t3v8\7&`"S ##DV,ED2d%H ɐ 6d$ LRG2_4"` AXL~M H/]]A]A_z]9`/H FY)E)|fD: V#R\ARQ@%b2PV` d)$Ye7Xetw;CڎH =m Y,QT sCJN@gPhpYI!%,;=H id'ft<|9e}6+\ݚŷ3Bi)!d}0#{oQK^WJc&`|Ni&ke>3: t;;=PW43¼YTX`͵9Ê$`Z םFCc&/31q hy 1B^:xf4+`_霅]35ok 7y xO0l?F56A릵F:箻Hl KiVu֌:Z' xtPB@V(A0\?6&jIU7 aaf58ujpususyQˋ M$4i(٤17E4UσZ7fND;`)NWkMo }#v ] lvg}m3ʹ0*dhEAWsm̹և @JC6 V[I ,%;A],%&oxi<;.ЏcǸ2BF諠]Cs muTYAI6 fYV~G0JH'X JA R8T;ԒH$/U#(fa:d 8!H_i+9t&k"8۠kW hT~qUR1TOþb?2Y٢(#Mt%$_dж ը [TfHsj7Ad'D7fF~GAG4[Kۺ1: td"ƫ:L^YZ:} #,SFPu:m{EX\b9\! u Dio.1F3u:#F`)iڜc2ŀ+dFJiydDI2 lc;öWC$a4ě09b{ ` BwR4$@a*Qxx| ^yu#5%, $ N)@g5 vRDc@EfXWB'Ai:`uIS^I#:rBNd^^( /A/Rx : ,53"yQ,:lZ?=W$! fZ 4/:4p!,t߀d. MdFyt}dG8S*͛[Pzp'idZLܔVυd mVkFGl-;z!#`c1lEp .>k!MӟNB+ ]tUYz8ŜAb3u `壖g{| }p5ҕ HЃCAӦ̙ #Ih'uYY%@|= &3QzTYd$LS;+搉4cTV E@r@gN(D! wwRtPD3^/&9lUmA?SԼg>SBLOlk `AX蝡Dl2HcD4ug+յ•hEGWXy`LWAei0 /Ka @]9 zYt{d= 0ߘ: \W\n3\]7]+ub $t!hx4^4hi-m:)iJj`g%89)8)N6vO;ؽ,vؖv v_ 8tXWP!clXRKUzªU:KMҚ`͵G8"AY&ixW% -$zW=]w@*Hi5[ې H}jV/ $I)lZ'@M+$/H5Q9{Rx 1zU1<#ejlf6o"}Mѐ*m8SW' y[|zwR0'1[H$D=  ϗ2rJzMa\4~7< j&>w`㻉-1oaq:2.\fWwxGJvcLF8ESyH'2Kki!y[s9R?>Ad]WtOg'DqլK@z#@L|Z[K $EA!34LN *o$`&ZU1_ Si N$S%0\]p+@Մ{gw7uvR 3IR|y9@ ʂT*(ATP~x"? <>.d (.q]Hh9@5<iq`14wVdz.`ۧ oWjv^'%GؓWo'ikv.^=zؕ]ƽ[i'm%/Hi+oj# /ʋJY)E&Y̒M ce,},d!H$x3 ]ZЋz{]4\_Ƭ1ˁ ks ^k5)l\Ord@"@*Y FtnQ$޴Zo|'J L'ҷ` V/y ji@FPC_()Tv^DŽG~KFS/^e:"s[NS܃/d>2 KI\6Y‹FoV@ƲJ,EtOZfpOgpT$wwGY=Ap@A,A2! M}L1-d:X[[[=}Ii!󂿟[Cz? ƿ45[_? &7!GZ`v`'{C@R x!3j'!0990g7ZbhqdklA>'Hg(y2tyA^`ͰfX3Av.k'X׬k2dlv̕VEղ kVu etee3HW(=AjJgIArR$EHU,>#q=sIN (%?j~ d<TRH#Ez^rR|lg?5h" cti0Lv] Vg/ha>*F~37t,ߨۈ%b|T$p(qI'KMN~UЏx7fd;}*uy9KITKC㈺*2xb_/ 믙niO:%Ё8+)3EDsQ=WUp^98\L=y233vf6j'OhW6h -On WE 0oW pO`8ŊD:a eʱm=9#rH$b4HT'w1//BR''WI*t"mmNTppG5#3\c]}tpy\?\`pZ9A|)ECQ~HdLPϷG!_AH9r+emN NתR`}򊈔!d$;=['4ԼyִWkhM0}Ϝd8e+;y`/sm f)fFGyc 5'ŜbEvp Hd`u:vA:TcINjL@@Y\:ә0XAou L2|l>FjeځYcRX3LIV>#)rYb%$s k%Fb@ 2&K@U{SYd ăҘ|:QWiq`+=}վv2X@΂9|7O I(?*{ƃ{ ۭ,vX #/sIҎ#ԑ>"e4Mos?ݡe@VZgI9=t##?.u9з$>l"_*cX*1RD&ʛlO&K iF~vp& 3msPC?ԹpEfƝ  ,0dJS-@xyp98]!Z)Q2>KZX{]Jq~O0}J[)M-pid3 7Mo8x Ltv&7m8y,с\9s}'^= >tI/t񁴒V}.M(. j, E,- _ʗNrw 8)C{h*A@4yuH tHSd$ Kۂܓ2Wn-s >x!)dHN-@%S4uj:+5jcЍAb#C﹥n{2I~7Ϟhr8nnsYvRJwO4Ks:C)ѪHyBZI!zJeZuėš Z.9#!ͧMVtCVrD$)Vl}n_v v>i82?Of5vVDrsdC6,F|MZ3*=?W7F"K u/~L???Icn~rƂ~LQ ]ɵם:tN2iV=#5G[_`<c`K)Ǭd':[+?@‍?D)2XS62oPL]H+4gHn2%I[ ^`YtS{r(*Zނ*![V233e,H=2E$A& `" h@Y[s!V 1]A81L\j';dUQrFPM^Җ@CNK0z۸MM0 NW8Η`*"\t >t]*쨸—BWbO~3$ tC yV H۠Sj2JFIs[rA \ VX3 JUR[jB0|`dX0jj5J +-\hID{R&?sa2%MH.0[yn)rErH |ea檼*d\x7$W&^%d63S5 -}'d [%֗<7ޛ"-WNɤKyMg9os`=IQ2dQSuu1Bǽcl5ɚ%LqYJ0UfSÚ`Q^WHr,]EĨd>~O{]>s>Kn(9wow&|pӓ: fB__&>2^2'S"3C9 MԤffԣur@Y ߿0sxf{xf:\Bamu>;YY#k .' Cuӂ\Ask,Y,q Ԟ@Gm;俥2B``GWJ^']L2sl8q"$nLLq,zk Ӕ7ƍ".z 4Ar/:Hui/Me$E/ e2A6& w Y:ʵJ=e?t/u|P S2'`n)L09zWgqTkj 0t gyX.YuB- )זYN g9N mZlf`4G< ~K^XNmAHX_Y_Iw_@~

$$J𕬖@F(? M6 ʯ .~g¾L ,g)3P·v0!c3?@ 9A_oI{>B+!g;b+@s\aW[+h`+H9 0iƀ֦ai$_Ra}! xI>?=1SHhL>r7˷aVW+0;mF@LpwUt5q'>p ^ Ͻ/)xbSSvh5ݬ׀i/RI{.GH>#tq@/*{b~/.QXs8|v1D8M*Al Tb9r[^C r8H !Bp˷K+zY/m@Fydl2!g:u);e733u,1>)V[RU\)H !Y@Vʷ% @S*ȒLIdld#eY"rZA`VВ*V(5DмZs@|hBݨvȨ1/ 89; ek$_gXW*KnYro`%|9=ӘW;C]Uyc2CI i؈&F;r E4seۧT~Jg{=~N8n)Fŝì iᯄ-lhL<+s5$-EȲvIx.1Gl}<6i XO2T0)@9$Y/] vU)rl_ZlAAo2r^pw&:_Юj@2%CR_j Ku%x> aLuHLL&@vuH7&~ uvSnZ5@Hc|sK O1\7 BD`pe_tnX>@n( KySޔZ1b .|x7$X%VkA2H<)Oʓ e8Á L .ptN&6 VWifY VU "H$ & ;e#@H4o ?h tIj7~{}i (u`;X|H tC@cH>/*چf N'wbF{9$[ʀ9㎉jnmkN"T7~).I_oMƒ{;RmVL;gv%wre^lGn >Ku(p+!aUG9'H/u0y DFi{`$'u В;\f'd_C4Sː]nI K4ck+ns +LM-y]A2ރ`2䝑gޟe$7w{/WAUc@-S\R*U}UџT/*Yխg!̳x^QF}ZKXBI4@Y@{Fx Aj5?FT$Ї7d! 2M>C_o‰m²C/Ҿŀ8A(PRR`;@s=v t ԡ6>MMb_ GW^q?E= ܠ/]0t?)DRA}̻ON5_TB滪QɝB&XjQo=ݫ#e$2y{W6̑i!we1%ƑJ;ufi#H ?pRlLد tmFI" O֕dL˧w `HIHJ 6z<7s /Vx1$B­c/mg=ܺt;QP\̞w;N_kw"x y[BG`P hD򁧪{-M?!E/~0!A=(0﷐z0`Z7`8 ޱފ4ptr z$$L@}T@ aY6`8y(sܕ1F4Q3^ {\\լ`=a=Z VO嵎YU5dUF9'!od2AARK@ K3$d H2RF>QIQX"C>e 82$l \+&Y+ke-00L8$@Dfg\+9p DH<<'Q d,€OD6N2O$$oAK ܐY2 8.}=&o؅5q&HDKG}u0;@9)|AFZFy<#.sH<kmxm>%}2Zb)ê ϳ yD׹紒x"2ƍQR[eK/n k 5ܳTzЙ>@Dȿ# eu>Q9"sog1iGeUaHcⷐsck@ )Sz12xzx+ѵLg>O/O.oy}G|!ci@8E7dpK!(R]cvYCyTC\Ep^<4d)y0Z`4p]X㉖{ eRK'dPTHG!d@J%AyF3Ѓ"4,H_+q!E $䕼N#l6͠:b. % FMrQW>9@nM<\d;0z`,Qm qZF#T@k(46*=YP,M:F3(G ,ĂkRn9KԠ8i'@Bȣ&:@;@$ :]Wܼ뒛\]gQ4K2^jR0OAvsid}ۚY C U9 !H[7CB|qkN8˩'NR'+߽p5F jkO (|G[}@pA5ڵ¾ +~WMdMЕ>HW++KNs(Fi;|3KvٛE!9e_o}=]ߊi96\b$dL1 zxCqđ^~w7wwn512<_(a, }Ku7, u89W^`~`bV>k @1aC;Q&qrr:@+ !;*UJPdV P@ bMVqPXfX IDATD2BF.AI H*9<|,ECOG @e` X>"SooĨ V6F6>R]KAN)9t*KzP, lOYQAL+" :ễs,AsZJurnbO3/^a?momg W'u ff7 l @!C0iӚ %A6o(E2 2MTzrn^uK')\s#$r_f-'d^hM3_r'u5G'_ %?*Z%{Ztvwt0-qUiI;]-֓יBOg_}11GRy9H(Iw=ğ?ɟNx Hbc/ -R\pwν'o4 :JGkO'x) a]}]H D'9 Ak)𤺿vRH>YÍ.xD]yptmqGzAV OȾ-P$r53MV:aAtB$&1 hHC{^ @ &A P:t?Ad"@9 z -2G$ʛ:}L B}p ?v5{p\[v;Y]9*?:7>F,hY0iY]ZHGfMdo]}K*QZ!t}$dެ|\ / &QZdmK1n9y7%X@Č't=[KWk2q-aȈ(RĔ&X<X@>2m/a $r.F; ) EXCס2>3t=#tFN{]mzU.,oėiߥukQ׳]C])0 $BX .YZ_.p y$F'/Xe.GCAF$> WҖ mgTg] ղʊ+U!"Bv\ŋ{d Ƚ2wXcL 9T`[O?چSBMj%%yH!~[jwf CŅ};_CC^߿Mn)`>?GФ=og քM~`rzB`KfXݬr%)L/c9y@GZ#iإH48=p$th :Cwt.ե]+֓Rf/r =N}/kFɷyg"6y2 uo{t&6{ȨnThC @o=A)|Z3GK~i6a ??ȏZѪrlr-'BIF4 3Iڈ`gRԏ^VZ'Uq> !1,ְwsλ6,gusngc:ASR_NV(YÅrI R^ޔX.xd6LYEr'byO<=\m ,$++g^;}N+ȱ8{gwͷ· \ϺyUwp}ZJ[q>[)w9~תj=<4 .;Y SHYiKRHt׭V4r`\;;&u D"O4&?8_~u*4 ?-}5pIoTsiWgNTpunQD#}) {"Xs9+ܤ!H$1TmONw:ߵx-v0u {")6Z2]5xmeߧ|'P2τxRBٷrs 6\ri+S_NݐU,I:!5|\ r 2\}da>YGuUW ViAJ5 E, %2CGG!Dє $C D2et8|Z_ wn)r'LSZ;[:`k PBCܩ'2׃\7svUr}< 3Gd:??271[-AZCk~CaZTKƁ7SS\\\4 55 OTbTa$(N֭G.vG8A*P..m 6$ʓWA#o[ٟ϶*{Sh IWo&gvqOٞ dIj-@nWuQ;ʯW_ 7W:QnF;:6F`XCS /)H;5|!Xp9ա7ݴ{5{29֛PhR!_W}}c>e{3"t.i+c][Φz@-#ryS%Eg3Hah*mIo! )d:Z2 '~'#{`%oozZK^N/.^<0W}=(20O}]KE*H^%zEP40i3@8*Hn@QB#{=A'yvzY^11F0"ThKm-AW?hoAsjNVO׀.d!A= !p@AI̅i4t;*(Y*pYAӚ4s,@t' _+q!59/?MUh\<-p[gn.*}˹%t N>T KT^ۏX9N:[v;P!mϨF/[ۮY[w#b=[S%z}ӝ9k]O I$DV}* R"NcMO9&,Z3ӓt`"[OqB,TF6^ ]PO'o+_yv3i .l=MGL0c\"'ύ&+ӯn̖̔<%)IVZ/Y$ <-}͞?;Aiws6Mg#pwii"Aedo/4DupqLjkб:/AA [MAo8\ d01MALt5h]fk; .f_ K]oqtc4u -t#P,(E'Z^0T 4Vc5ԨQUV0MySj]mVk暹d늠\ ka-LɂoB5h=2/:wXA?b"`duzCٌ?uP 20N0+;|aiNqHr0u $]I2 iL1`htyΕ[tK] 6Uy3ͪv rB.(-7>6rK5-u|@op/w\٧-|MN[6c4;eKA}OnatL /]L z5[ qci8s>\˫8,Bc.:L>Cky]&}BeBBIVuD Psswq:=GO]RB] θ{p:,?jjJjE"׀k*9 7G_V`C/؄Y \W#ȋGbVWF3n>vpTsnlA\\U]e\ pbAJOBae{=N=vщµy7ު135!eJ2؈ox@o0WAݼpp}b.2Bkgd~3x Q]Mg-l 9y hh#Pk@w 8.p LL4ŐH.劾j:] sHՎt:zf.AZxaV櫐ɧhU/鬭<@U w.ݴ;掹ifv4cCg {CDŽS^6چ֠g<>;}Y_*Λ ǭ89Rd`n-&P<'/gr;US\nCd=+!鎊v }I_6W\ 8:_e{HMU.;MW p TJ,㓩3?_մ/n:=عe]sS% yd&_V1dȪ;yPD8܃?dwm`jf7gQNlf-ثGBj6]ڗ|rf3=42d]s! CE{! ȭ8vxK /bǖfYBD>d|"AͤIs^2U>1D犙 r\Ni506 {ၭ& cnRgjTS pݴZc|nev{?# @l]!hYjE6싁bz4I4&$XR:ZNցfl *h77M}ԵVWPQ@.rxOZjie 4SzJ;O=`^qN<^#XF! $Q J*-qg t>SdC QKy;x`Ju`+]hZKkpMrgH!;1NNP4dR7,6FĝU5]S' =>~0q)s 6Y䤂 xS3X>d4I$%ApPpǚl}`+k\r5"Ulݙ3K ^ղFOJk'%f{>Cp5tЏ${?*!^x(LT9ȮwoݛLsKm9`nՒXيe]u6xk6wyPSo5gMst;}3XMgF^8pL0Tt;e%AAPD6>ZiTSmL'I\i~ݝ߬D)wO}?1/_$eg{-fsM1h"4yY6vvnfn6'G`jX'o9/pdbŸX$/t9J-=ҬP7QN&=LԻN2L+(m487t!)T"2u{BjrdK ݔu(i/BOwCɫ%.2)N⋊`za 揑ŲX@Ʀ́sׇ7ҢB9 YJ$+$||5(/#+׹׻/WGqiS?l6-(ICPop ňaJe)7p^u9em. c_Ơh8\H?BrjrT9F!eR\H)-.Ⱥ1nu{,{?ip"SJh~;$a`0f?Jr DipZYcnZ`77˲?xpA[kk΄l)&7K]xxL@u1q@v$#:```` 0 [@mN{Q?Нā>C43~amC 0ă82䤽 U:!L07 = HW.$X1'EfB.ASlWm:-` KI;R&DAWjZP 0k M$Q-L- 3>|frXx7It:@f5 & BV^jJJHH~=9WsQI@jK:XM#ߩNG'R̬MbPx)yKP\l[֑Dk8cyOVFzivf"T>ҰX9HqN{HOyCϵɼ㾓1Ų$#$ɦ VcUs(Yh_>!0NqmiQL =L!( .~X!c $EC2P{?V2Oܬ,̈ʈ:oPAT ~u|B"8}|m9Yc~2e H&;o0ǽ}]@-YY2[ef2<u:I{5I0Wes;/*!LZ x-g]cw'^SL3+Ϯ9 RnJ)5TװBo~ CN!hԓ^|1S`c$}o+r<iMw4 ew&Pzы^@:Cfg5 h uA_ Zo8SQVjV0T]hho@4խn*U@} 0_$t 0+LPAF ftn1AJI)ƃVJ%j>ϰ`4OCͺ`ty^iu;hUBN5`AZ2eNҁVW;S!?2dDTij3q;(7=ozp߃su(-@ku&{Ln|76_}eǹm~gi=~/paS=% t,Y{ؾF1"PZ1SƏS),NyҴ2 a٣*ګ7 `e!Wlf6P&r9tg~dF5BMB55k2^p*dv@fXxfǙ?eeov 8'xІ0l=~y0<(RLJUlz쓲t"b.|UUU+c^]nxkڭiU߭ǧVo#4o]_i͝['[1-7k))ԁ2Kuޮa.gzs}a4'ܺKaz{TuMƔLqz8ϝ|ƚ[Zm岾-I~IfYKJ_m-(:kqPs ,<=7DD?]Ty#̀tD_W_W_5DM}<5Y$|o_K T \ ,g=Hw;Mk'.Zdn˾.=sɝ[|Aq~9`=.~HNMT'~%zFԏ ˥3xB@>E0 d,2hEHyyR5S-WVFZUJ)[<_BѴvAmr0! %&?yyO]]@ȍ@Whh,)$d&=)kTxi'q  \T9!?6 e g3M-'$4Z/%`=a=,>QCATuTT4"!(#% z3Bz<%h:g $Wvj@ޖo|z piUG]G@zEI誣%UaQ%/AިsCظv)֭S劤7SVCk=l ݞ0k zCr@怿<]6~OV9jЀ sv-c)k*mx$ꗗVos?5$? 4=X ".LSK $-7JCBPu.?T%5 1Lh*Cz"IA7=T?Yܿ;k]կˑ7kP\cKo.JeZ^gRnRcj.(\W uw=(Sп ,\bǤŜە\׸JW|;gt.)b5X+]g]G!@dȖ99N0>ȵNXN7@VUg^^~'ٹy3āl`7V9 :f,D~1v%TKxj$W‪SrMVh\E.>a,F H;PU\.f/Dh@+8y3dTke$__\A:H~*JEHF>iwK'<rQ $Or=-Aby$^JKkp~*[A{yyy+IQ),w9 XN&sֽj*߁3ə$߃V}kT1j2y`VG| | P+JRI-i)#@╊`tRW[;AQ,PGTwG힐%79*QqÆ?,{rv?IZ-$+D{WpIi(JC$f'Jbb}ي/u~U2+4"&QµUpڞqyQ#qt+Γ@Jz@N&gZrG-Xwt޲9/gzy8SmJ"w~BFkFޞg~zE9lA{쯓'ߙ%q.k\@K>'J܆?J *H~3y@W P#j`m {e\+ͤ1Um1T rAc`,YCp;ro3]ϵ?.x;'KO|$ %"zDAL՘ۣ@V9d'\|?~ $Wq5uq dɔH>pAYET _VQ)nx_? G\czȕ !*Y. $KAqoF7F`rr-j9 Ā$HJWIix%d[jdIYɑ"92ȐI5NzYd\ `͵Xc@J9E@u D3ۙ,N59(Th+Wի28PouK4P@P%О& '3||w7Bݨz]!M)/? +Vt WjRLC4Q@!!@cY.jl }/GSqu~3M}P FWȸG]_ʏzE >*Cd@B5N"bVydQZd #B}G6 j^yIZ'zԔ2osύw*U.|'bUDgt(X /0 ^uN_ ֒[C`U{qsDj ˒S̟2Ge ~? VHz`9{h"I@H4HeK@,~)*NlDy䜔r 5d dA'BI,t`=`=uf3yOuONpZ} |JknQc;'w#NY/[ J^}+ׁ=7l \uPteSE[!X / tN:߁_!N&:RP.F䷒į>K&'P/1S Lhlz#u'Z;}R<#ոϝ^Se6%W=m] } S bBo6CLrzNP87QW;tS~f>qRžSmno T/ckP`e(xoV0_:آGKp!Lt 7HuSy1u݌Ot:erl7t _{'V_T^{\NjΫD|9imkjڢw߫pM.$@ZKҟz w$<er< ~o>xLt+WXj"Hyr]^ EqE݋VCz Az22[ ηEu^j yUVFn{RM~Ufn ڨRK Q:JHQ7UBUJO935X' {rΥ*^4\U:/Cwh xJyx^1@Cd4G#9(&Aղj&2*1jpE oL`MpX1/+1x;wq,} SJOn" ԋS/Y H@7b 2+ i E@>%\d&8rNrlg6^u/u87;szD-W,T/pRF6JuS1$CHN=mf8D=$pf6TzJVq*(O*o9ޔRK]<:O*{qw1/xf$>Lf0U ,p@e}+k)lf 9e@URU'4)F4z` Y, Hg7wwxϬ{מ{޶7d܃qoUZR*Vi?z7b`W`<|4YrPmsxeY[S ht8¹@yT'uԵ,o)8yufT;S`Q ?GSW7Z)LNwqH@Jcrp9}@5|SdjxniCkjΫeܔd!ʳ*l5}\ goøU&]O#[wN_6{z5dV~N^*'\S˓ cz|΃TTP ϻr<,X,F.:̟X0;w1TE} R`24^8ʃ*T UJ 4 FCayTo w;06R56$cG6FSՃ'6 HwX SVJLRivadfv)'Gͳj8݌˿ܓmQbjdgnmT"U#zu7Ҁʪʑmb.*}$P+]cS֟_FB}]sW;lЯS]ϵ>ALSTs-;/uzbj rLy'yB6*R;vܑ=~TVBo*5G !9!O(!dp_)o/aPpM mbkw=X5VM:5*VŪ74n(Dn6r%v-Z w}ʎc@2e,\v$A@Xdpfp8K1h g5YZ} '%k' XWLq1T\Pd,PZ ~@0*.`?#J@y|*?+R.=)҃P+L)o8 P37̵U[C <OoydLd;pe]5jvd,0T6;P(K`U*f]>!!w4(ry/7mȾqC;'/r})++ŋ1 V=PG9+EҐ鷺,=&ܧ[gVw0JZ[i9HP帩>F.: %WȐ-qUDS[ٷony|DWe.d ٛ`QrDh)eƋ:夦B$ZߧʢPY\bDb#[5QcK՝8cqsdBCmO{=xDPGJ$nԷQs;oaG$t>m/&{U_o-(,~J}U ̳u?ʧ4E Ng6p40/C6y˾2Vd~#x'Aو} #i^sly/zcPjseR`=nڀl]\>w eOLYrpqH#2KS> <+ApJ$PX0pw-}@;f+(~vr8@'ႈ4b;v=[(^V4 |%ϙnR-'=q`+ 8"yřֽd,T۝(zJ=j5ZWk@vXKIU*MSc JTo:tq=p=dPpÂpK9Xܰ .|@"SY1s܅JJ+̆.F }g!ZkI[l2ݒ>RWV@q׼g WwKGticw?e`NfYϵEQyL˜]y d$hҢ 8:lj3MEY: Zh*} dHQS/s_ ziF^ V!w%+ ^{;t:T.{~]osRtX&y #] +Ny4ڨՠz .5md] eS'A W)i ⟆+:V .Ι[ G@Qe6A#6W~xW^d0hf|F(j*PfD=@7J?`4:2Y,AO7 Ľ# DTLP*V6r!]d,beD<#.|x۾޷%06 HegA>| 2*s*:_UߺjN?gM2X4nVAS/^`g] ʥʂvZQ`X+P[Tou!ub!Q!{bvUڔY;l UI ?ЕO-n*(7lk ləw*NسܓW#]hr?oRPY_em <Ʃ&{?0Eč쑮+2gV\ l 'ݯՌkZ1i&1d/~*T8_ʰ'qiPR88['P7:uq <#I9R'a ZrvܱeT8*L×RVzse [K/C}f=[_b]JS_7shsk)T35;xGwLt^ҎR C!УjYv25^WXԮ媎xJ k`uNf@ׯy`mS1Np F2WΆ;MsOpaT~/%\ٽZ6iXZ$t Hs ) 2U4+|( B& BY 8dFC?'o&|4! p%(G9z !|oCB`YRH&(Mi<`ﴛ;ajx NO~.u(M4gdXOo{V}oO`:J`>KVpq{Z~-U)&7 cKs3LӖrj;n{~ZJoRv'1cipvVYX UzTǮ[Wy O&2Z=d/K;y ֻz޹^Ndt3U忯tL1 ~s}PMuSLup[==4fL̘p]ճޚg/D7\}2;Rg7w9 >2H|ؠPO0dH&;xwi9y Ėg"\ _U(Pxkqo9v->qv=YX<rEKi1+e 0O jAT-Q@bkB;WSC(UokIMjMhNPuTu\\>/ 2A&r5T>ij99U_Ogi>G lP5Aޑցo!l_@X|u^m\M$.V i&H@w({@訨 ja$c&h-h/K;'jx *PG sv|" ƷXS ͧ ::c |odw $Մ8v&OK +dl;0^2B\Ѧ'kZ\.KT'=7Ԏ` ec1F=Y{]>W%XX.'e1dvLFNjboc(@E*)]_OV =c xVa`}|R̺]. n+?>Q#aҠʈJ+f)j<f$OK) hjzGe2#"fVK$??XHYlt5; dO ׬eqd_@&vW C(7E5b@B[ 򵨭=Zz`6sX2_b ڑ_W0HbU~mb|G U[UWUw[~_/T@|:cM^(hQQ ț2^^0/jT}eWػǽ'os%]W{P =,;D:8']P!`_'[7dv~׼@Q;wU$޿RKJXbc5??&-33XtªrLH=rEjénV3945ɚ=kꢞeFS)r '£{;f!gkmJ>8v$V8`*8$hìGLcg)+U_7'Z`sF&vY5M]MQtZeZp}(c KO Ɓӓ/ƽ񏶫qׅE|)tWwwv6AJ o+U>i4#pne̓g)83N%8yCgaO> WŽ;{f+Z :*zO ͤ @)A1Li7%#C6ڳ!gvPP\VSpLJh3&Ds8$DD<z7M@ DێׯK38 >Ap@D R( |B~goUEA[+!ﵼpwanO 8$ QC٠ HR- ~. s8ѳqpšGo rWYeg|&q"X'NHqT2T(x_}ïCƫ1 ϳ@>ÛN0R\]nȄ@R̺1Ŗϧ@94dyC{IkyIFIO2A`qԜDSư12fN_}]s¨3BьA7I+upt0TsCZn ,DsPdO΢4JLvޙ5.N]fCɉ~ݪs]kU;9.zch0!)tR߁W_WPcՍVW`q eqf(8؀mvI (8_o7P ٜ ^ZH+ݺT1 Շ OIu|K>+A%J"a\iAG=X)O(_E@_@D׈;!| F樹U1**,DX\M\42TuF0w@.Io_ ޷)fmE} /o7||7đ֠c.AP-p&;3o }tFp7韧8Lg 6+_vQ[NЯK^4k,Fך oYgS!t88GC#9 K5 PΏXW<-30kn~@؆ %>2u\'\_u[[8BCR7$\>L)e9lAXG_v>vzn r>,1/p ҉e06QKLU2y:(MPG;"*FҍoĴ4A`혌R&a |JL< 0#@yXʳ--=3LuyQQ\qoT-;"ER+=U 6p:} sLѬ(pgyW+P6) 5oO`@vbpd]&(8!@f50 ž NN:#/:P磌G]TPqY9=⦈*!ԕ g!>`Ӥ-yCސ`;۩ R[j3 IЀF3c"o#)UlANàʪd&U`mue|긵!"د띗??`gyZMlp~vT}f"* @^/kncMH9En} t'IKF噆RڠMHSB]c e6 jJF`VX:?pZ cv&j9YRc$_>p,/qݜPN(nR|l}qLĠ[PڡJri+i{eW_nCR#G֍lu[ &YvqH4IKTӘ8P8ECr`&5hCW6͉jQZܩ:cyU&gՈPW^>Zuj|S O4RM$ͲU6},9P Y̢|?@zI/fG9*_5A d+`y y)yJ:1` axx[ ZS(GPog3DI5G1&_1N<}3M܋.=v>`Z::M^B`8Ig )"2НJm3%8ITy@"^P a՟jvʓ½/OŃɞek`?0~ |xapaoroCX븛Cmf"du0tHg'W, '7\vf$ix.v(<\4(Aj4jL, a1Yr{IAqCZOD<[LT5}ZJu'"@AjS&}@qQmgQؙэ9"WRZM~Y[O<0K4YA`9UDȝSJd 7t` }պeWZwo{#rM;~=%a8 Q P7&_r4n-sC&!Uفǡ ;h 9qB;k#4ǴT(z]!=j"E?ɬ穦G]0u;e2jGL9)]1ER3#_IZJt-@o*:V)KQZ/K>9+huj0P8@Kii=,㱜{dufމǧ|9_1I^VaAUdAyV+J,]SK:iӼr/XNVMHX'TZe巗Ɩ+a/{Ҁ@i*̖0Q / % 3pV9M{{5jCvb\-\m]򤐬zRH"94F9jک@♄g@,e\<RZ%3D. FZ"'|,`se0 2M'>vn$Zy `TH$@P ҸD0, ŋ@}YMRw!K 22`oAlAբ:ՀT( Da=&\Y 9!zNʛPG#[Nۑ,+1|o*/T觚H*{:1mNew\}Q chN>[sO[ԭǟX%K}Y&g(q_+=Co("C'Nd"~(P"$vk s6嫵 Um׍1Z ٜtUF蹦Q|v`GD(ϯ}"D/=,e"FESa+5ϕ\$Y9C.[i*79e%7Bٔ6e"G-Uy\J*vr)SLZ֫= )ERwԖHGiy $|F\/(ݾRݡL)IաkB,8Ǡ{U)6Z3ԋTI*g58e4 A:JUYNSѹ }C T> ,d Z0]oYG4$\=Ri$1PcN$&2ZJWOg=T:/?mniuΞV#+T}|6E,؅7UiP>LeQ_lv_--z#;vTE1]yrwp'6g9HW gK)}^ֹvƠ١<:zk ꢡ\zI49t*RZ5d!`(%Sf7ܿQKiGZE&k _t- #+UZfv٨3%¤DH=u^_ ]ݗA& mN,BO==fШk"VR屪-7(~Ye]u_g+j*I^FkB0xY\"Lk oǔUZ k\iYg-{kLs2س7)nqI~4bd,''7{-WoPO?8[@ɮ %諢:G ?! p.PeABcms Uyi-Pc<EbkFDq*͉3HRYN[VN>.J~B}y4rq}uΛ.#idטWcFC/NMyB帧:.8ol;g^ Zl4p˗_& )J{T)甘BFӵ c(C ꣦ߧLM!띺Jϵ)_bnT<~cPsUC@$<?'x=46ڜLP[DB= t&ӊE +.ffO%~Ϩjbtb%WlV GDgG}k#wq[b_z)Q($Q Ag9 , &6A]u! )PgKzG8!~N&2^PЛ&vL- E~ҁ.&]ڎ[dc{Y`v+M1\W_ьƠJ3>tgX2\9Lj ۮ$k{Nk'Rr9eW-~=?L6ƀZ@ *S:rLP45RP_ q[7LRwV.G3"X01IVS "D1&جk׏)OB!UO:pPI`Hh icMu)-'*t>hhj*=&*[?E׍q5ՕuHuԫj/<׸H("~=c4e,SB) tn_%t# B jr(ks୍XX$?G)#I ~Q,TU$Oڑq?њ/hrf@˙E@.׳3uux[nd.Ӟ<~FdK5MqLz~4l{kC~]6Ǧ钣 IS0PKH#y} ֆ hR!iC Jԣ)BgN [7 _1Q*& r(sS cN&xj1P*f r|dǡ؅~ S*uIp /%]hG^@n1f4ޖ PDvؽy)(4Y/7]TT']g nO]4kd2_{XK;3^>yɌV47 ^m` `1 dFg YHc(!5;}0q&hmؼ}:0[h Pe<6ԍ{G(f`a2M]ECM>!c !Y1{2Zg6ӆ1ݝBgOIO"L IL>vrEL:q3=*v诶!Uܘ6s~u-md.%e,_G*uh\:Miގ"n5>4Kyl$Q`rf2g#NՖD)/O;&ǝwD>qk^ \0꽮2d9{GRS>˺z5UG.䑽 sKoQa _ϯ_JG\u() Nd܆FlȴsS|Z=*Q {z&I}J;:z "8⹄\\;]޵rtw`Z=ijZFk)j-Ce ?P~(i.2_v31&^VJVc+|!_*ꘜOStDjB't;aQl]p?>Vٸqr>WI]]om( ײHY&4`14l1j c<;]CP9G d*#j1&; vPFjuHkLѻe0,I2zCQM }G8&`z51MPV#:!:EcO`sm}9d)Z=eԯzmdK\+1/wa[Y줵6L( EbRVt1;zk%Ll@4)l5N]`b:F)i3R *|6GcKtlӺ3D`3'$g\SurNMZped6ߧi j(7e c Q?71}2UX5LWcCeu&6椨BCSFka=Cok_,7èhT;FcL8c뙝|27ǔx{`t@Mހ :qj=~; eYQ9 K<4)Ɓ68.H4U%o><7cuYtG*KSl1i_DQ1<0.w?62юvM8੭ Bv5=j֜{@S!m}Rup֔A`s[HmMyAl[ڑzl띸?JڞWN'J_lM}a>)0[SvdV=b/*~}bZ֎^GmJvs ?eFa-~%FkzCEތld)`b_yIU HDLKu 2!NPU&Pd!2OC$ pZ19F3nLߏ6܆7;P|LS@EEC1**QFa 8߃'&9_1Sp 1Y22TN7$ cu|y&xmb l!jcWC۔913 rBΒ4g21?0AZSJ¨4e^#iG1!:u e| #0J%FmŔ\Eh'jv&T5j f&jZT,S`u0j~=SА^ls0L18s1' 'MɈjznv&addJd), #0m`@cI֕f'KLtpұFQk`ij2j*gln#37V##LA?CAcL]Sury?U9ȋFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaJec/IENDB`pommed-1.1/gpomme/themes/Tango/brightness.png0000664000175000017500000024512710546031402020701 0ustar julienjulienPNG  IHDRLDbKGD pHYs oy vpAgtIDATxg[=aGQP1a@d0KDETT@%)QT"P$YQ9͆gPgDys^{]gfuZwu/o-[~o-[~o-[~o-[~o-[~o-[~o-[~o-[~o-[~o-[~o-[~o'Ն7pxC @Y$IN4'd_|-BP Ty<ǿӖ=R<*}K߳|>gkq:88oo***<'ρ)b"S};(?ʏݱ7 eL>#>i4wZ|#7`^6/41MLY:KYRHJ*"SII_Ǎ1q &Li2 Ns9Hki-'_TJ?yXJV(E) 9N7 dL P2@%Y -+ug^zֳL%zE,bY?|k>oʛfyLb@G䑸$Lcr7ʳ<֍e֫NuOx5jШA s4]IYRH S¥.Rpc?ǛwI' ʩLej ZF;b3)_5_tnҍ?:\c.d! Anb3//@' bp+Xcs#,a K@ D~|BZH `9Y'@HBQw~CПC;,VHC0zλjRMs| 4Lf2o=yOދgt\2,>>'v+8އ>K8or%w[V'~VjKm dM6;;1HI#`C2RFȸqLJ|w?SꦄZǣt=yLɲ4ƫZq2^:vإc0>-C P`ֿJg߁"0PŦeDIB!ol[B,//3cxl3bzvv;ӷ˷xydlAKSi\BGRCjHk{L-ybv5ר}x鲥˖.i1ߝlH2:e42*fT̨sF~G! QȿЋh@j6\eOmx@jԶa5u.R.B_ht`HwOD)@0sy aRtk˓ƒK.L#(&岜(4u0y,GL"' X2f90|!Q‹-$"p8G9*GPh`-mGЈW`lc72j+D#o/"MlMqۙw_v|i^3 g8@~?D.E,"2Ka8Ǔ H+`.GI։B!l-zbe 6^כf<%?xqr@8BGEEĒAaQ-v*V^3 I7o@oCȶ#ǎl Ϭ .x# AnҘC_bgd*T N:yG(x_/_{߭o6n3LurS(~8q:Tg30žpK$mn{>|9y>|&xn{a,$杇^st93n}0~daevC߸&z I@W`Dc%ٿg=,|8NNd I$GS{fYo޺=<Bg̀ s|34]Շ yσ~o|7V K%(VGϡܺ,i/ @INJ:op+v=;θ- ]0PY {5X6v;?o9n.(Θ0.v_]׿ۿ?.S'3giv$e{v= ڱvVگ91 A&~j#o]3(GpL\hx~*;7oۺqɴ}{췛gt{3`gJKKTfLU{yRMo@ #:0YCpݼMv TGIIͱ,f/-``|ҍzr2񱇿1޿ld  >dО '2#7EUgF&(/=6=AZɽXT6`ě9 '_jctHO;( F!Kkloݟcov{=r֧$PռM(4υCBr; _w$45SI;\| oUr\Utƥn >Ѻ@+ 8?9-rKɯʯ@!2Q)CvV ̛{dsj򔄤sVǏCѼx|E2ɉ̈́oj2a "@6M=roF~H7<Mbll 2Gž3/iۣh)yf=w@ژw)g{ -C۹p;Ȝ?0|H<dzf`op S`L O7&h/k -i2K&ˁ$DRʰmLsvvO뺮r!:kL5STKyZԢQzdg`Yf9n:%+\`#}I9bS"L؈y|wZ?f;5 R8@&*Vu}̖_`0ݙ-La`?H+'$b`"J;0y OO^z1/$8F2GA^)y8R0 `7l0fۿ9Qfsx2r2tl%?rl'*i2  -qx~Ly󤽶zyN2ML=/-@ ǒ5v<A~M&߃\L71l3 )fryܹ2)^0мg/9 @䝥$!wHLķ*Llf!V&-Qv5(gk]d#`5j=#.ȕ 23ugsyHb7,[p٩w;Cu&Ifb|vXҾGcI|G IE)!_S,|*P15_W ,{}UK#pcC2u.8Y< \lD醚6^M/`i?/3,98?w81mla"YCt{OxKYڃS|&dRc@&y6LEx= 1]|!}y@4nUq ?FtNB`5g9kx48<'~O$+*{tZZg;!bג^PPnm-6_ALS3Ԭ8zU=>SԂc+( ѫjBƤ: ' mFa"]pdQ=B}^e|%_CRG̋<b[%J1}0MT߸sv:qj85N f'mM@@K2?p K9 c+\Ng&vxzo΃΢xH#,븎RqStj0ƃN$ Lopְ}Ơ% i3ۿr>ēlNy '.)PTr#O{WK%xÎOf֒1T%s@0h):8Nv&7s^x3X')դ1^x!f̒BN`m|5l'}vI@I3gwZפmndY)G?jo|aStݷwxBτğ&G# Z@  قn`a.B^K;G9v)U~̭ Z!ZZq'+Zsx!/Ks__RD?:~ߗ4߻ȿȿ xxL%g+3ANJU9 lg/cҴPrj\yR$rJJV9 I7$koo ,cFEs@ di,g55*] ħ*\T" w[-6YV R A>Q=_|dը&I̍b9`9V|@|ENa#D\+h|bg6,GTLICs9j 8ПG2Gml#f6'nu~7zU-l!F̽w> e;:XcT< E5j?< 씝R"##SЊfRߞU}_Ú?X >_Uy9y5g~a*>n;р% DyyF2+@*JESha f7 {gΜ!muj 'VXzQ1 &Z JXNnSX'rc"׻\\< y4fr)- ?USTH?a ;f/h;$Nj$#FEk=t5]MW&n&g 24R1 ? 8}ӝw!<0=yּ#ot8텾(/@9OGPrʉWCNU; }o/;C} 3e&[yOFԓ>aAp{|2~@aǫ&U@f 6u+bTg@OQ,tTq>$f\B4Q24bj0U@1ϲG4rF<+sx` lcXaCrpWΞw#| ~O6*Z oH+bJH/E/E^/Av. dp3olfl:MFK[G/O[K=N{ O~sX\S;Nh0A$`a?A bj*Ũxč@J%|9 4&6 e(aGfڛ޼ʄ< 2˄HwNsynՎ69>&eeq b⚄5f=H0=7փ;>jߜ&d6o/HM)L34fʥKzI/g OO%)yu )F`I|͝ j$LA.!*Njc1& q'@.I;8!E [oz yC]! G_(Zr'q@HobЋÀqMn&?V>Ȳs-yK3=a5IZ؎>V*]41VRxl?9z/Jw]?j|@>]a{F?E =֑?n9aOӝxP9cX$ xHE~!PQ fRK;4j$G}ʯ*C*#F?eߧ[-qϟwOb2A6 5e"'-+G zP60g ݦU¿I;_ٳ 5mRl }Sxd \)8eiBpj:Mo0-O =Y VX v _ȽrS;` cRIUcMYS֔ ~DUR5niV{u%G.Zn\J"H?ZԈ;NK6 ^[ᛀᴡ.\`"2xy }G8 r$ϣ9q@KAb%Ck210OB]KaT7} 5,{r) ˏ򣌏kX9!'8%K{ @^(D!B(d41jꅪT%2Y&80#Hsg 0CNCKqy/P"B%#oOJy_˷3_Xb3?o;$/zԓzZO9c!zs# >1,E T}rs;> 9uqH<5ԇt\qPLT{9c%P>kϟy|(tsz͞<#0$dX>2Z󊅺*\{<;3gHDn& n 6>*Szw߳%g'\w9#"owHge 3 Afr)Hĝ)SUu`*;kb Le*SS^Vq8%ps`s<}osPKm@.vllH&dF/wT}ØF-Dwdn CCq1߂|/s/ṟm%߇m: ]90 e /Ė0\23.bAЉNeHmb xg8 "Z&Sd -)LxE-KA:JG.E8 YMI3h3 L@yР3xd:W^`d! ߐgS pt[P ;nifb0 ɒ $%emI]#w<~:n|ί L?>Fo>2$d2m@w".A(Tf1(\e)KaTQ/qx1 e#~!b=81.bPVcz1($ p#7&s'd! QKxHbrss4sTZ@dI qf>g ϋPl1(07$d1g'-"{`ل pypZ55}<* i+"PfAWp*:kt2r5DTŖE;w\ Tgfzn{d'ok (99 MJzKk`0Nќr L~/ G!9$;(G] \ޒ-:(B[9 :bb‹̽d<%˿O% LtG,tP/9$hfW9"-9;&/GL'Alc [e+ @iJAA yB!֐EA[Gx924ͨc0'mLuF%RFvKe`(1E]v&y, rwW(D`y|Wީ|9Z|'3Dڹְ5ɒo@>u g]g88 (ò )K"Hm>%Z(Դ2m 5qwCΰ}~{g:*jYq/5#s,tP?o'-tp6b3HAԷ, @P, ]J;:KcF 빞:rͫ!beЋ^Y"K)ިz+vq[|2z錈|v82ydL:4"A Z:A|oǠM= .u IyvƍV5*4|g{^QmF$]2^w}4Xc+P [{^^.E(b+v _ Pb|BVHs4 a2O1>4>g8ML7d[FCC,tFj 邑.@uR0r-PY/UJS<8yy@Ay{Y/)@Q `-k}!\\ RW be==a HIjuvkl5[SfMf`L4>_M߽@["5A\Inec1hFE}* 9Kr;?p?Mq2Uʤ??\dLѿ$Mp"S)r<-rPD!?@.'4?ZCy ]t:UOCsmR $OryūGZo8{7B1w\'4ON)2ݎظF_%@.KeIqNrh>G!Z~ d+$ 4bA%5L q'h+P 8֋xPq{ܗ ZmEe̐v|WE ŲXKay"/}y[A,¿06y{V=0g4I jWvp^tL whpl_JSPXEvG̏h%Rb,wx>_yE&kNB25v<\k?G ܸL[_b@zJX|*H}cmԧN; r9A.dbP(@!,T?_\ ZM/zI[&!R*!dg[ߦ4\RRPzk3,:ǝJAgD P]a d =rc~E Z "}6 lH 2O~|*ONnsP秫~;A^Wtbz.s:6,/ e0>4D"{oF353L p: v !u@~Zq0/ΐ]7{vJ}λ.ǧ dPʂh9$Jz#i$I| R}&! R={ NQZƘJ 1i|h 3Zw]ڂ8P"@U@Qvs)UX:9Uqe[L4# ɓґL-4Gs.PPA7 9I]p;w7$߹IM`)wʓhB$&1 hDmy.aVyYMFVQHYz\K<䲅-,~4}1|ʧ)/ bg=K h/2$Xq9j?B#MPHx7Mg֡A4|#d$a ML ^tKI@C!b(G*C#ZNP(yHA1oh],MI; 8L ʺK)O.9f$/K>\(N&2T@g <*JgO6P lD ~~G 2_mϓL kyIZkNwǀ DP3d#h]A/P.6M! E Wp< &M:R~xWyl` pu712۽d{[{-M[<'})r?K0[ p20!x>Gͣ*礗e Zg~(ʣ@bO\2%^Eɥ4!#KO<-٤gi"M9:e߇FT3eZoi|L̑xf3e&i jVL#R6)mJ4D#>«PݨCY](;Њ<T!T8S\\yC !F,TSTrdFS7^)`P_a/.W!5&~(BvklA3xJ^G |H-Ų>@4y|YvCX:ե ܊RIMjiiZDiKzx3¹+,^\lpv<~{QF+ z_ăj'8aY/61gsjo[wȚjs8M3B^&O=R㙥@x~W)y(2Bծi'$u1G\M!HR]`~4LYf;оχZӚ֩3' u2Q&D0&$NS)W(d2& &, \c@NH ) Y$GxhaSBsC!㜙;iwktZZ.Q͉1>fLb4#3S]uA DbZ.lʘa>=~{*e]J Hl4!BCxz˹=jJS p 'ۨXZoQ&.ұ<-(jSPӨt4Xdl'ݎp4Iy*7 CIvSuR;#Ġ"Euy 4zIW02ϳWWﰥ=B(B}dkH'DpwE ns8ta UmD54f,: $|2FyDA g dm瑱RO^5`d $q~ xgTQro8ŜbZ F@΀ U, 5\PP4k+p|ӆ@xtxl8 O o~3)7Ў.Se P@2 +%SԔ5NgfSwppYubUNDg:YC.96&=l_XRbRT_1[ԣ1B*Cy"CoEb)ݚyQikng4H4'{=~S}1*HA Z,M;EX>|C!T0=LӋh<$IS[W~7Q4&,ɨ!JP *Yu70 uy0Mk|Y/A5,pAgPX .rЈF$ @J_, 6q7m?A+Ԣ7?Eg +Nt&H78@etQ%P"P:PG0({+gZ]*-VZϐ M Wsr^9:<ҙehEAMp ".4i&BWiz` /&j"f){.;CA1- m-ԑJ*ݑ<Y7f 7Y#$8 XUUqz|,$)EEI1'4w\\tэD/݁iLY4rHpDs#FwFYPC{UW|`!==fnX&+76 ZM(vq!ЍyFZ dM;NG!M0| %]|0?%f?4ɓ y$ "6DŽ`v8E*a=Yڒ=j(;옲c^WjRH!\3|п@ZI^y X-$ 1Xs7en d6 u Sɩg3)jX 1uHl=&GG=I:AnAEΎXSЙETO' FQCTYRz5$))%銲Bf-ߠr[@K^F3 h@g /-g==#=W݆b.uM4b } %Xhm(Ge;UT7BbR^sE47IҐgD=t\*4pQ}\#( R]GD\" U6Gsa^G5TpP|i;(rs!8ʲyBsBu܍5aGZK)(E8HV~8:`{og oN]' ^L*5%l@mp)}i ͛ ٗe_ 供n88H[p8 ykݹ8{Bd8n3!wEN{aϕ;'/8y󩵐ESV4Z[^u-pKa+ ,m7 6P8:-pE%h{r/&b"xxc9>ɐO@gg'3feFQ[[ "2 ]T.ˠ@mj͑x;n0A7WʕIEWUP΋}D==4Ѝ5/q׼"sEB]f-r {{[֒jyM!cLƘyYe9 7575wU UTݡwB8GPh^6_ؔ!4; 976!V_by]o9^N'}}m2~h#JA Jk%?1d!J-4덕Ny < r\/~{M6zF; ~ tj h`j!;2HN{1Z|=c`;dBv(Ԗ<Ĥ!aYuuV*U(g=dꝓ Yog& ?iϳ0ft,r.'5'Pčy4Vχ8O^thsZq3o~ MX=ޓຨ Tۧ=0(dz*([#JK .urZ 3^^r76é1dSNt!Zv#>o}hDލ+$dg@QC^ޏ3e/_db }?w 9=sF/3Հ,vVüN[iVpS)h'9 ttQN-K:>Js jվ@& =yy|1aIhn1sN 9^AH^* BNY~?N,\ h6kRPFqȓEIFF 3_yŽ ̓(=ZI: b$]&#\sQu#&H" ,n74 H!]jI%$Qm+@MK:) d>jSTe)xIȽ\)j(X B1ybePUl:hRՏB_ yK$m]2XaL|9{Qe@#wc! ،' da}=W֍eY0y(F>]:j0؈E 2Y&7MBAtm]Dg2ЂEvGah]ŊjqSZ\ty L9S,uumr+2Vdn2:@V9BLpݾEd<¿ߊ9R6 ;g'> V dsL+p6;Gd|(K u^=@igڙvIshIX26p- id_̮TdCi/O!dB1 qqYFA{C2 dMt__oTd*+I$}<ʣ1:4ho= RCț({ZP 3ƨC%ZvhdaAg/Hw᠑(䴕Zu7O+{HD#62s=˵ۊLQӌyDoM`jX!ayQqռ㡛6mJO0ϘgR6q4Egs7љF;)U8*IB:uazGU`Dun!Zg N1z{ `PikQvK 3#!B-i 2?$k BBn-0/LTN ПfΨ̛:ݔ۵<#(E,p#/ @/ݘv?By}C(y hcr|I=/oi=%Ѱvb]?QIC@rj!]>|E!(h>?[SgG3Y '),dFhzJA$ {)Mi$&n ZFIl o5aTBIUq4y-N Қ@wȺ> 0jf&Ly;BBi r'4r}ѥR~B/F#;)zk d8Z/Z`%oF JF9PU<Xy U\EH_+lbTMzMno[z'l?m?mm? aD<*u/f{(Be < ޮB餉 7$XǽؚթnK4ifZ`6o!ݴzu=D;PLp3)J* +dWpGBKDY\JPsE@7] ':U81Ę!geʼk}}]ZQ0p;ݝ v\/~2Y A?Q qq%QFw9=vy<fYOebP|Z|[}[gl7nS+))ur^{d ``P`'s̕| n}_ƀLr Zn;`\b ey&-IZC :3+AZpFupswr'wz;I p{4d 1 6TB9Q@I$ `(+JW03rpd> }.gg| N 4 r-h % ;I,'lQ6t3(o6if#(tBE#'aN=H 4=dtn>!38%yT+hbz|n:l9ݨ{&|c©N=ur? B)`LyąqσNۆ6A%J.#f[~^e^bۄ /=vGcwL;mnCy3t JIp{C3N; 20@qNS_Nft݊G&of'gnA jx;cXrD)Ht  )3܅ʾ ,a%`ɠ.r^e 8Nd~ ܐ;]LtGGs jpD5]C Ie L^B!tpSN Z e:l%P[#"P:Y)ud٨TB%0BY<)mP>NAgcT}>?BvoXY72L/h]&݊glǿ5lϱ} ;Ѻ++/by7sd? }V/L9N&jR@ច[/+/P$}ZJ.A&ho1׀,&nci]"tW07L $NXx>\Bk 򂼐.zf2L9̵Zs- h a2,IzHK. V1Ѭ-e8*eNhR3~F9Y=V1+0?$|>C_܇AKs[wDM=Sbe׃newH#iDw` G%=VL%ATAi+1&E3ɔ HLkHm=P䉥=Bdc QȃR8II=$]]YʲJ2Pgu*g]Px9DTB:JGw w,m#`SJ@ L[H>2Mj@2ъ+cVcш$  npb 씝 e-S5:}vicژD%&BDV)#eͽS>Hx:x^pZh-I &NK sBwւ`O>c>f8(?o &F[5i*_$.8bki e^E(i¾¦_ZT>l6uXsز} P\WQ}-QOee$&QzJTd%:,d&Z_9y] i&JF2FAyAV*iU/Gk@b몬+94Q鐚I{7X7uc޴O}<%g1\UT״$0k9ofDcn2Ђ(' [S\e.^^I;` fjD! K%~yȭ \ y=ykk$}{2/rRse,vu@c =(Va&!2r@oM64K.de. e\|p/kka)Pٻԓ^DC8Zx%WFNJ4ulo61_RWJUr.*:,e)JtD԰@~xbKMA̽%,~4G?@ARMA Vݗn>""408dj^D-mE#`@JCY8EPz(5c(Tl}de|Fq^>jR0w;/Pj// 7 k"7Z_O dӞkkNil6f\VPevB]&׸WIp:k{ z Q0L7ĠJRI*Ѐ.iwzc E ғw//lY MaCyQE ^QעI"E\dG5O'y'+-V"f{P(Krh/Q}WtՓh AΜ|B.bNIJb;\Biu_ЙdM~nDiE{I%o }A>5}jLG\Ap: MІ6f#1Ѿx֍ǶVK&SGsQQv{&tnꢬ/뵳A7y<+&L8]f{F3'>q,;da0;/!gZv] iakA~76v  Fp p?<VhV\zSHn|o"HܝmB5 wsQ0-$9@$ .D:ȧ|J=r;g{5ޫ^ CL{޴O.v O.yKޒww5p-rI9{τKrtC 5y ]En[Vۥ7H{.ZL>c<݊(TF!@>HC#('16E)F<Eb* ɋ?oeG!o%VpvF-L'&'I&~w3f!3E19d hRx2*4G2b<V ]:ZO "}S~CP4Xg#= K2‰'g b9r$H1a L*m52#A DY7o?)aw4v[{F5~ppH dnܚ3;^3],X nMt2)cpnYQk 0B7[挥( q:?C7| j^9] lЍ[%*q5{\y3[VxW;*9\:&d||WPre tOAw(\ʫ ~yQڃ/ L*2ol#DGG*C$%r_dr)CnI HyAj:%T3EWw=YN>jV:iCi=@#6/?ojv5baiR6يVB\ |m|78'XBd+@bYe=8\ )_Bfݬn cFj;Oͧf???D/j 2C9ANG?*6/Єl4s!H2wfi '>?!یo{Lzyw<~ ,b T=vgj 89N9B4&'#<#0'g0ywqu9$PdAK ϬϬO*moq6|5=H\2 dU@d'# *W6pgj:W~4{! Qsl:Hu-q'1QWИQєhfAG w2KEπ~@p!z`gߛ~*(fE2=;އ^x/^ 5Oc6#5#%@'9Sz3Z ɋL0~%Y@ {@ʣ3~m6Qn?$[A~* > 32g?R33GLo%Zm."o1Y7MD9-TUUnO0~]c6M=Q~0~_!nﷲo>n B}Ngi\Qiۮ:u^58 R HiB $D"؋`+۳ ,A~R|2.o+%Y@DWOq7 rtk BZ|/C2L+8+@*H.U+ı:)AJ}pvvZ]Z %T6˷>"ܧ,Yh\2ziBs1`ypF9O`qZ/aAnFoB9m3p{Lfu'%my* ;1R104D=SD2O%2x|38ar܍xvw3קDzbq7qk@^Wc>!BсZbIa'яIh L^@ޔ7 tSH$Q=N}3Hd'QnjKWby ;e']!{sWL VE)S<&"UvSUAexſĺQusBЍuA|\c#T"7r#߂ԔRY?Dr_ɕ"C\52d:Z~)jIAJs=~hvwF݇1yz@G'e71 __Ȕ'HQO E,7 @ -p9Ww݃5Uêa3bκ) f?;h) xMwޞ *SۇG ^4`?d?Dy >7ϙю9>},,l6"?Zf~ <ʓ\y󦄾g@Wd;jC`,7S5Lz>PLYfͪ(W TREozyЍCyT_OXcAT% uGc z `(CUP IkYFi&29hhM D~L+X.f,ل UUUUDD@Cy7s39>P7\laWUCgsgá&f܇s{ yE.CtڥvaQ3 f`P8tS&%?aD dQƯ""Fu~L*jHC<^R&pc V,s:dɞB`I>d6dމnSسHSɕP~n F.W?$]$jڈVd>ۘiyWc{QX X)߁AҲ"d37geWWԧ4!=NfL%Mչ} xg.ե::22 -iIROI=Z+AIgB G$C~|65{W yw @,;ɾZw%gD8"Zff.#e$磗47",,ɒ;P|O4&pl0ЌfS9 O̦R"30úa#ɜ%wI c7 ԫU5Q%ZMsކimY+kQ耳 g:jf@ޕwuu4g8z@fTB %БBUN  =䖆8TPPuׁ2I]*Y%s/NfҔ/n ! ūzN#20,poo )Mi*0gz5on)t)ׁ$phgnjR؎A$d.9 ,b䁵e _|~i'm!#?3?'ZZVo3T@z)@8499 :' w` _.aHKa3Ǣ` 1M ;?AuSO`6L#UrѐD.{Ҟ46L߽M@HUD֐lf,f]3ݘUOy䑉:uL[ f4&4Rc !5IX #sh]jL?0+Gɸh #RU5SHUmi r\ ʽ|p'cO4 r3du-r NRD Xnt%6#V-E #3 .0stOD#(TJ;ܦ{+(c @za :>&1=@^U5t:#Yeׇf IdfERhq= hOm7v zE 2_ qoԬܟv(hQ"p*ea?uS$EO70VT #Ttt㷈KkJ)wxE"z:B^^P kՑ/!{YqI -bz8:9caC,K L!I:s>UJLbđ- g^OSV3әxwi6H_+}{~^a)k-Rpŕkوf$1st){W^JAl*ѩ"Ed;,C| O}ydHRRJ_AA 2|l {&!@5UMy+BI76#s=s ɥ@A>;zTAoy },4?=%ma]ȯ_ [n}&=XA'RRJZ&nMMaЍI*MQ ytA7@Xʪ o-s.u=$SNR 6YՇiU1`I#$ Za9x,!%]3e9(o]8:yho/{s $Ik`ޛ2]'m?ﻆRԩ pwfs%MnB-qsXt|+3:׾nzM ^f K cdLL&IKNwYy @b;NVgf lv;ffӏ-H%*Itw[̐/2OOQz3@4~f?4[E6ߍ2^"jd) znf\a:ZL&.`!LaYQ[(H7-S{I轂,\:we=fKккPKhP*UjՐN |:'~`Ґ}[a[ayhM9*IzMFIZucv{ A^|3xgh2d}0}?`);rՇ`X||yLz^.C4~YY/Y/Y/AK/ s7w' aQ¢EA=<"\r:w&PD|Fk\y)`''AdTv:UwHG.FACn"XAkU[0Ze g :;%虷濗3wN-zV|,S^C/l0?d ?Z;'t% gi͒Ke(  ^gN:ߏCXX6:Q0MdZKg;ww{AS9SPbaL5h4 oeʂpx9!0"0"p#px5ԗLͩgݤN *Bd:j{tgo`JU{0~M$j&Hy:B}CO!FNh-!q>C- ,bB 7}؎ ,e=h-os Uz48b P UC0*/LR2IMw8jAWWvli"M %x]fs&S./E 8M6t e]^A8  @'Kz6QXJu ͮVH.Fi0Ĥ R@_a1nvS\=Pz]1CC !z6w#伝v5tJ'PתkUej^GnN&֜|)MUSMœ>mqEG-k/"sS*#+l% t^ꔝZ+\Vs,Շt[ $ҬY5-Ԓ.zPo$]6/@]Unk`-a2BFSBfl J┕>C!pk5ݚmYR7ȸ$'9jZV{g+,( Ppś4ڒ%'_`v"jaԣ8OZ Tl`z䟲n⋷R,F7Q8+gԨ53iua uE}{;^L{u ci'<g4gf"sjػR@_3Xek w;( M @&C$>TV{"Jk?2Y#Az(PWȤ~Y k<jzZxyH ySOOOXe̓yNpOb9jZ`[F,,%&dn} 8U}NgPuU.6ip{P9 @&\{"q󨻃S)ɋ`-6r#x)B$xil57 Ъ/ViHzΰ}S_f-)i Ԓ Ԥ Zg"]+LTs@~DK8܅ 'Q5^#C 797Cȭ[9vv꛳A}>SaqDMCd]R-N"3Q UǺ9VFb>ߠWtQ31 w!#<+Sl~TE"tdI0kd}ByZu,I`d?Gr)e4mׁ|Ry|82pjz lxouli"X2O%`S\||~nnnw{]e7Cg{4cáUmk5ݚ ZrɔLlɰVj0''ʳ<vvK߽T1 4AƻY]@#jr[Ե R Tܠ@*=ϞLP @4*t@T(:LFN4"0l ۧ;0j,rʗSENEn{rk;m(mt0/ԥS~ų:ʙ *%%,2[5W !>vr@ޗy8 d,?"DՐo >2L#PR#j!0N 1Y7u㕽qW6~'Gۉf'. )JG_/>mkĔ!B΢7^,3:xiQl#3#`}c}^CwIdO ,\ 6-NolSXP { t>! J n~`o[Cdp\u\TV `HC{#8:Og(Kd,Is9sD&`}mMg/̓لyTRjO-]Xĸ>?AG,Ǭb@rz^=-`O'n6Yd '˼ߓ~8`R)L?"^7$3d޲TOSpqH$K+/"/ '`@cv|M||M :jnЉפИQLf@ʛfpIqR `F-h!@.KxX9DJCn%ݣ~>=J@gZ/ RYJKfQO0~< :IwUqY&S0&jpH{(CF}CVB/``wkޭ= / 总]*qh _LE^5a  c ptlΤ=$.lU 6!kYKT Ղ/Й1z:D:I0~~5EX'(@ӆ+:cꡀp{m c~$F>A].WO].#֒:rd$Kp3V2<͟}$Q %eŖ g% UV| oɾI`}^ ƫ  &zpY'dB^Ur&1ITO'L- RY*le3Xufgi )-@eғ@ri{iuSnvrztW\.!{3jYaX$U4'z" n6x!BA4+ACQ^Yhzl4Sh=mHC蕈 YR_b`.s9BBDCާyLUBS!7tD( )LcT>N㹽?ΎǺlBJ<{*5v<*u-!m74vQ8ۧ0Ɠhht=ZaMJƯXqgobA T/Ջ.fW7e!JG$d⮦uYx$I|@Cr#@> mj9H[dwpց(Ue ' t ]R:?tj 8O>`"hm6-;]r*wڤځSi ҝ٬)"ߓn+F2A! (3!oAޢvˀ3ǙC-O#UDC+נ!{5O^VSCg2*8#>UNUCj;~z2/iB满6\+{%eZ 'P{^^A:2/@1/j%Ӝ{l’{il$Ʊ3[nY7;dtZS_Ns. )P^^B7~=x}/'AQ{^Ÿd̑#8`pDG4>y.Б>t> yDΓ@ޓ2tTow~FZA6|9Tzԗ(5J#>#NY9OFI"0C҆`gbs))?7Њ{@ ܥK gI#\49@`F`[̛Z 4 g3Kڲ&r7vO-4;hNy[y+3}1gg7_ǡրԓzҏH4a\$$ ,sjV;ϙƏVdl8+pV0r7n*h->zpea45UݜNn)uS0cn j`DM~K ى_ּ5,'וs{, fv0k@O=Ʊs3(Fd0[2%{XǬ&RH7$}ofH&7;9^ R+S0=椗> RZJKRUPSVttk5W* `$/$˗ Б2b ;UK·7+e>z N5`_WZRn3DCL'8,7 :HEo@#kl~"*m'<4B߈fx3\d򲌈, @ d b!9D T T }  + ,"I*6Dd=˸? j*OdkDnTCՐDSĺQ UC'uS<Ƴw?߱Q(o%>Wf+Ce-tdZ6"3PNX ,CZhzxJ&$t@C2H#h-p:`fM.i)5FP?կ<MS&j#rF}~ԉ`Rޓ* vE%9@i QZO4b{Is*AoM ~ #wS T!;N0@kd;Ze \[`LEU!Y 34 O4CkBov9聡+H鯞BC+I耹A%QA!^~@ ~ nC@oHUTRkKhAӢO>LMe4v&|r M<)|Ճ؁dnRIBCyՉ JaЍ -_VP^0~0~s#ץʫ\ N>VGܵ?y( tqGBm 7[gL d`҅Ȣfd(<ě$( ḑ&8*j[ZK7%JiRP:Ա~y8e__`e,cSWJo-Ϭc=X[묧hW=HTs|O_Q~ZBU{/3sCPԃ\ g rUz=y莺2+H,ۧ$zfTWU4O?~2HǵլAG6L ,b@w ݳz %yo\rex$vσC]].3잪h5F$5vS Iy߇jABnVu^ dqg7c[]Ė$RHyUZIgeҊ4p "b$hM24F$/SGQ}C'@?Z//i5P:ӗ޼F5@%uh~^`gQ $$ <)x# jRdȳ`f}~UWu{zF78,=CҟAxUސ7T-m<+ dǠY94ۈ*3sC4e7VYA! @@ _rTՆ32Ӟ؉gݤB uD3[uMnﷵ[T}'u.v1NMGp&-A[c7 T:T+senKSԕR2]:C- WeR^|J^QZ}\A M4H̐ O2By@ Sqj\?n} N'+AP="J7aK@G0^g逖f8d%U[LZMW^z+K.Ytg:?@~[@  ^ ~n%DqTqU\;ޒh؉l_bݜV݄g&F dnVU ZDC7cTM4~Kj_ڱVNk֍VmA`U(wvʻ=XM``Ky>'!;&/YyY d noz~(7 < XnO4&R3tǯoАz NSn_?Pg&pHΓ9@:T[iZXrCU΃`Mw1 U`U`c^^#;U z ЊV:zl b< ;s9\eM'%(*_z]'4-  n!= TQU@Qefހº9Vfh DY7H4~%'uo jq﹦Bm R4~=Ɏ~q~i=\ 5&&UJVO@@7!on΂Ї@/xjFΔԧ6k[]L -Dڃ$p :tyxJ!h  *};ZɯjYC%߷yվY`Mse,%V\<ld#^>>QrN%S)!)߲~EVQ]/r'aRZ?j 8T:H[i+mS85^V#\vvJS]Ui_Q_hh&Up? ]WJC^{;]{MzOFL%OQ t# tD'9?Ux 3Lʂ2BC 0707T rn9NpSTYj PxQF6^O3[nRʺ9Vc@fVN.f u3iM:6S~C%ѐtW 0~}y@5'I``~y3ff***x~9vEd2Ȓd '́dy?APMuL_ P L+~J})SuuAxR;j jP}+ρ9 dI&Z 4-)UA&K](א 9M/ 7W3CTUE%7\!W jB6C7h~rP>w;Bր;6``mYRBщ^7q_ @R( ̺51x``T6~+ĺXk @uSݎ.+D O!5 UPS Ws7+a D{]p>ǻtF&%-It;Y|!zPZ7zB 6)țip7pCjy5KRLf2'K+i%RIt'56ƂxnݠJR Wr=d唈F>[VBΕ9gM&uH 9ys=^ _ʗF6Jah(JQ(ͩcݔ{xX7t]} Owxax`x%:ndI&n5j=pH>igǃn1{/Abg37|{|{ ni[*8x4Vð1a@PZ5۱K:9(K"074_0d>Hؑx^٠6TQvSJTJnt_jjjV$z`.c{,fus B=FMWf\i"7*=ߐkm24;p6觪QQR&ٌ 'Xyp7w _;>^N`_B5~Y=\\jUvCC=y3CMVV_p{:~o 4R@2.zHcP#`58$Cj-P8Z)GJ삳 Ͼ}?>a"_)Z[Wԙ~qi cd(¥d4*?ݗ8C7b:99[ J MHE'u;񒒛M-OzZXKaKu}|an`5f݀hjQ4 ,5M3~O%fSap؜ Bs9oԥ. W'NR0nF,g{,(HDy!FJStr:M-wO *u4AZ~Q&7hpJɖr,G@12e[v<#@/@*Ak12&E-[eʕ)W>P: Yj3<$ъ28Td ` Ҟ y #y^4^&gFU?Йdp&;y Y?f,ejM$y7?@_ԺwX7TĺC⡅a<Wu#qM +$u#'ȺnJEn'n&E}fϺ/^=,"BI=hͥU{ߌc0ۇ>cT+ޣۧj}v!eS^ݣ! ˼2}$t|&AB{슦:'EG72@zɋ qgyyiOAR˔yU4)wrnRGHwY|gq~bn'G>5%hG;ڥnQ:yGAMFί@B2XFJ",/X`!MއF%d?s]`8js*o LPn6zf$x nBjq,˺!"F)7w(luO?86f~pV*Y7bjE,&w1 @ylh֍w>{ڢ;~WX Ħ_%A#+&~.']WOsrWQ&_ ?P=Tr+l9&+Q~Q?:˽y .sܚP/2{g##| ҅)%$즳ZP.IX_/H+ Q!cLX2_&@v'?+{ݻ7:yK x%ʌ'uD\҇~86qvp%(U%`+!08nއ~=7Vr5?WpCX]l኷d?ş) cjl.XB7"3L*(IKh81\MQͿdk{ųnFS ]n~JDhM4&IU$n}z;hD#*x4v~57>~"iD#_%t"3ꙘvX>hzLx/ gDC7r#y|BڡU=DbGi}I%7g?׿x3g6^PcwtiAҖ(v9A,WyvGڏES8_Z0w d=,Efnxvwc_ߟo`ccU6['(Yk6N`'ەtǃǹX(c0Yr΍QT5||)_N |ISKwoh<ôg6YA(`9r1#y1I44߳ c1zN=G3 #K1s8pb7JcGMWE$_x\ƫntDBˎnzf 1o=h$Q^,Pgu4amXGed J`ta e56pH)% =m(B28%fpv;k ͥ4Qt;o˼IO>1iNA_WkHup^v9/bi=<)Z%),#߹@W  F[Шw<ΟzrvS }&jP1zԣװBN!ਙ^@dfiJA$@88e7Jݔah8^=ER exq"_l5AKc)Mu4v!Ucb,7g/pσ.{3Ҟf5,P2yDKnL9 .^\ c!!Ql_ VcGY( Fchxlc#{@2[ciij}NPc(ϱIJnr9!(֍aDyw>tsqa#k !Gz=4tZ3u`F~r!^`\ _mEZfYlҩ!1w^I#$<.-Қ@wƳ3_ڂԾоΣ@.y@>^,p$ ~Ё2qΘ5;9Ϫ`Bgs-Іd@fF\&;ȇLyʽ d..#ȍ4xu=VMa^T?VLa^Z2> fJ^P\bY(OKOc,ս8ҜGb+P+=B ^]xA'ي] UfaScPO4tOq@C=8f?b_j=#p/B<t}#bwJ")rTEe_R+ s3`fvhЀ<2K,fiOL& w\O?Y3W{Wooo pg#L -Hwk FuH~>|D !AB2WM _9*pJl~e 5EdpPRٽ^ wCnѩh !jvKcztjHO\MsCLT5tmyqM.ccqbBRH0k9&ˎOh8=O:zMJ?LӼ+w%)Iit>q⡛9.J_g{<zJR1~m` Ռc{iM::j|ߣj4^C #;HMlG'lvfEv_v'̖<5^}`7oTNu;P"Tw;ֵASR޴~;0c-OjBX 3x \TjS[#v~Zg@Fj;ᴦ5)%f:zwՀ6K_)j5G%bx~sue(Cp3hjh͜#~?zm:'_ecqg 2v,֍W?3׉agn@81`yu~>S`y]OBlVI9jeH H]@T4ܚd9a8A˨EBY}!Ղ !!t| u!w'` LJxEЙ-tJ\J{V\-V-U?NN ؼD&A_ ]IoGֵrh;NC⇜[$<.zԟ< \I>W,_6ւ Д74$"] \$TP&8Ѕ`u{'ҩ H67'@{#Ż/?fy<nfe\4>u61\@%B&&Q`bbٸ ,d ԝ.V 'UD%d>W `@Jx+iWz'r\hM_-y_ޗ 3_TicB]GdD:d13]3|ʃ0\=tyt̊mP;<0$|/!aPx)⩤8E}<*ʣxGxxe7QÓ@@r5Y=ȍ; , ЇJwV. xuvBy@%J&WG_2W9@"_ CЛu _}9{oZf~>YLmWڠgg96ᚎbg5^B1n4)ng|CtɛM@̽<4*NzSGr~=ӊ?l <+c;Kۖ `(Be>:!D}ljzQ^re"ll'DzGb[=Ѭ*F.ÀNI:y$0$e" crLH*jg&&C𞇱:\B.#ӬLIڰ hP%!a_ 2<7@>jo7fwxnJyN|d&-p)&R}@w}Ȼ#tҙK"}!mKͯg9;$3Hg6MJg7n㇥~hj=snkc7DS0):< efl9%ؿ=_+cǗ`=c  RGq-<>| dE^y`8Q&%S,|dY WhB̬\Z7xg#XtZcf?zC% 22{Kvvu"b|(|L0> 1,i3E57q xj1I&Ggd)d))Dw [sy@T2 vP'*A ,&"(I0>mr< ium@f[-dMO}-ɣ 7j?+j9J9GG r^2h..˛yt6M>$WDqv p>dٷ/wF!E>53͹6Nh`SmYd߱os6fƅ~;$|PB+H28!Ȭ4E͐ /ȟ1weSB¹ApPt"o5/L7+!X]e6e}4RsLL'MA.>Nl~f&3AZ2XZۤ3GJ'_?m) /JLJ*ԛRK fHIga3n P3()n_'3r޴UVM[joӷp#ɭO7B4||N-3Յ\dvͷHrY~y°kx3rofl 0d[Fc>d>S}:69wx'߾׬1{ϫvY6L1}S=ys{ՂS/1 (6PbIEۂzI {q|H_ejo(Cvw^#(Ŝ҇@WtH?(~ᕡNJ61;9o E7 A@IgccX|{kQJF"CF3Л}1֥eL[ЎT>NHPrKW*z)'7$I$kYLe2:wnnԓ ewKwJ|ͣ6s }4žg߫oX1SJQ3e_s96v7 TlEH$h k_d0ԴEZ/XGV{˃ń* HÃl^R}T-Hț#`_;uk.Arrȝg*l>$J"VnWGqB0>y%Y7͉O|f$ޖu9o x<2>2.K$iþG곜/583L' ***ʨ#VWUyV'߁9X-Rd|*\FLg)/ dتvTh:JӇzxs ŔkU :4L1=1g.=}19A^os6ȪG[; \M^0u)<ϔ38MA#kpKmpVTmziWPbRɇKwM{?+(Z 99sl(ăK@Rvb3ȧi/Y{e*= +Cy9hh[d IW?YX](a#E=ɶ0ʭKyNe_a#9]OMN̾`?go{y>ɑCd)I'1БǶNJaq9az;OmS?aP W} ]9ps9hva":k*3H'I'`3!6HU H'I@A>{񗞢EgL 6{cx('HOb$V6yuO=NJ}{F>:mMԀvm_:K˾Wٸ"7[tFKQ,%DtOlrl 3 ,aC%hTpSs;΂zOPKuz~lMჷ E!,I9 {Tޔ7Nc5uM~i9r+.rH%_AK>Md.!D3&T6Ed(KUy@yp##\#͸8 x !l)4O|±ǂJAS~*%ћDzɜbktFb{Y71y aA;f/Ρ z;2"t 1rƾwmOȾWh-ٯEg$l+j:ǵ9o|,1p?pQ׿{6~Vjl@= KmVX$ (=l6.͘- Rq J:s 3.[ tf<\)/V,K$?vaWA(DocC(۝V$K ,M@`ݡAj[c+*~(e#3G벇 &6 2.~?{<TJ$n;o2{g^yT"5|^!ygk@I2 TEk{]J묡a8K1S{|xHQ+!hp` p+ vx>~14c?l7ٷi"wC1Msճن^? M(4j<1_Bf= 4vQ 2M!B!Kgp 34lKh,12D3f4hZ.^⋘Z,l`*tF:0>N- iUyY:ٔ:HMH=yqJ% %ճ˼,.u׺! y^.tsLgz#oyț/rn98CPLK}!AKVs+z.sɯU/ W rI/%vM畫K+ao=-3U>rH4jyN~xti^ <"1={&==m`, P>ܘ^h2wofO3q 虹 =8-rH ̌^bWkx3vpŠCGoHyQ~ c?DjvT%=derOG_}\de X~9 >VZi5i~}y^@X#% '%=x[-AkaK@/PhOȴX^#=2Y) #h ϺrCԨ"di/t Ё 'LK]C⥉$RE5P >?ڜ+,-P\ʥ\Odif͖BBB8iov:tѵGװ ʥHI?E,: `ۦ ۋn}{\xՅ. Td+ dr0qP$R6<2 B5;B@:sd 0-2H`Kx- fhR/VGFa1 m JYFKa98UzˏR^bp~lGmnUZ~ѼDk;<t&@U7WG} -07: X%-8% }8@QdRTwNQp7tuJ Tu rUZfP^ؐON^HJ[f-0h* ʥͤo{Ür2pK%kxƟ|.0ܫa+/ȁğ&]g]{ 3i|`)U`9`%oY k9l*)kJuzc6&QSb7C8wj6d AKbOIKYjK&`lel; @+MS<:؃|k Ɵ 2 Y@y^@}K)śo251g/^8EZ|/ih?ݭy1@R:ͣ7rA>G&G(ULmVK}xQ֚'dJ_`KhmӐbs(2x| {ROZKk`d wޢD^$oK")Mi`,g9aZ~M[`̦)9 ̖dn4g6՚RY 6 0̋ʰ%pU*K /K@I6Jte/0,H0uX2YԐ"+H * \[fhǃ2ȓ=Y3%my &ρB/` |*+dğX) A?L34iK&2YRR6 m,Vr>G@kC^͊ $EIL,0)# 0ul;N*ys;L`fr΂&֜#&DPaEsiMD "0HFY[]uqzeu}S9}v֩zꩪo@3dF1i@HH`e@ nT#8\ Q_^һeX0 8> #pȽ<)Re. 38q/aP,oFI7y oYdpO,V>O5ϯݾ~屭g@Źnw41 9/ ы^zr[SAnd\'Wõp턊E3d{׽q?#?^s|$G9c=a7h]Q/YuVһ iVPyZ.pS݃`)K \)r> X*,5`&3@w7p#әD@[YO eTcyE| 2A&H8XFoZ+dY^  eQLVUdA_a%ȵrqH!UD.kdLZ-L00dL1,i ղ A.;o 9(u^&۪E=l)pgQVÙ'@/k@K&RXnׁ| >s P۸X*V5` K؛@ސu2Xz ʼn} t?!^Qr<(fL=āB%dzUy`),ӿq(U8p@Y.i&ioI&H %@(#y'x<-OGs4G,OFQn$3ckk`3 [zKommE*WrX'3An >APIzI/ɍY MnD8yTGI O>0 yM0^.PVj! a'w]r0%${N99H_+}Zf6Er\,c)ˀ//@nf`d32BF@#~a2LA2c|L@ݿWPJR6Mn3"gyAV \\F,sd.R.yfLIjxxu-ydKdqe,$d:EXPB% 04O4ncegv]nsVr֭uvcU@kZgZֲv} Isɞ{gz; 21p~y rSo[]LgpWU?;K򊈽ڟǓ}Fd߂]L2eʔ.-_ *T0IY-eYI Hޠ-r37ssI1%`TlS vʙr kF>Y**IEN>R.ʡrk// ٬f5EOzғ2^xZAt>>ʵSvNӗ!oHMBa@3L$CNՠ)_"IHOT',>xYr)wRc_=rmtQiߣXW)cXP.Xt.mi-{TȝA`Jj"R. rו8..fTKd)KtN:YVnV`yVg{{ح׍,@H P4(2yHIBAn&HV%PX˥r\JI@!ɘʵ2&(f$I,Wȕr%pqM3) Q%*s%K{n7#1-zqI;Rګe0|#"Un[|^B`#Xp*L&7TY|2JRX/ ++f'd$s6dXbU S -KH{h q$Zja=iLc٠1=n*HGNEJ~^OKv ,=}؇}vM&Gn[="t^y+yǎ~SbclyVqՉҷ ?&!\R+c?)+^jz_P1.'K7тfry2 98JJ%\0EΧ'E"ws*r\薹enē%-y`XDž `$f:ɝvg8s9܋E乆ktwʂg$] @7 ]Kxtsx7^Lz-K& eӖLwqL}*_{=Kz{{{ݿӍvhqp|EXKw{*Y%miJSڸ6#Ͳg\ W(hϜ|Z{6# ݩ:W*uvW+t]>)e!/O/ HO4ĝsM}0^M[ڪި3t4N.u-坧)xU=N$@皳 Աiv;MG-7NWQg>U-RFF jMYuײ#FgŲem!\Цo\;4M@ geH3YgCOx/ͫm}vyl:~a *m9͂:ZaF:?=eݎ륣6}hY+(T/S.kyu:{NoxGHY<-qh)맦wxu|WO wfBN׹Բ2UKiJw{ q{C~~ݍf4̯2ctZZj1hL%Fl`5Z89ҿHOOj|USj5q^R٧%9F|t\ʚUZD;U~7I JNzIғAr)]kalAy'eGu1!(іvҌ&.XqD WDJ Eᥐ;=w{)pA "@5jh.%t|hqy̅i%JA6Wi@_`j_U<_RdN0B`WKo66Cbj+5@ka5ug¦}7m).xV-xy=ӀF4Ўir4ޱXE.}盎3]KWy g \nX@ͥρ?tjqyZ'?RG5|`zk,, \}t<5f:ru~rʮz|Pd'+@ഖӠ*(tpV?FwB7O@G+h#mnh:zWk\K3X+$I{=@E2E&tfzzds4HD% .\ˇQ5k]o#׷[kk_ Ȼ'B͏DJOKK?,˦79eky,'ǏYL 5h)@+Nw+nϙAj9F)T8s%\Pmep=s^V{Dd?=n(h,cX, Wk {+ 6 @h}3W4MƂ!taꝟn̚my]}tG N{ߍosT? ZmShh.͛CvEY qAz%Ғd˽gV ڍp#uYr-)ZE5L`7{VeKfmR]v;}NZSLb.,F^\B_aUP_E9@˚}ݬ9 )X,wYPХ`AN2p: `Rotqv^{|?3=eiB+ h):scA.mtBL N#Tj, jU,Vas3`h ~BLst׫6RQ6LpMB`T͛ŠXKǔuJ2_Ǖǂ5H9Ϋ'ǻݛtnkz\ZY|/vĚlyA^}$Nh5lt8÷r;h;'' e?Ii$!3TĉS1)pMKxsPj^JbG g2حӌQ%)ﶸ-?RWnoNJ_YB)Y/okSEHx>y{Ͳ#⅊+ww~Z~KWt}9sf~o~z{q0hUYg))+`3L5gMwvM[0Kk+`1CP0 QE1S?` (`7 jA`[>Onܒ+c敝v5v Y0pʆ0,AVX׵jn>wlWzv◍{yn" @Vd j?кS: GG5tdId+YrvY) `{~}V#[}A_ 򆑙wdĞM~ J$'7ex߃kq %d䃻wC.56nj̫}Xbˠxk[)3BMԚֺy\v>=`._b2OS^LQ+:0t;(} -b *:xE7ڱ;%i%W>.8~/, $< ?g[)PU^ȵFGcLMY7>AbZoApXodOE6pBzyhRW"vӰ(QfF"[e][gw?wWQJs&¾w يf4ýmywyMhBWĝ.u=ckQͻ;rjuwZֺLUHTؿأ9_CwdJ7XZ}&˙R$Mg=?H?Yk~Xگ= z'(ZFQ3I6Lڔm-kws7}#O0F`l =SDA*X_X\@U7_IiX"O9{F3=},h,4k[Ph~ #v@-& 0D*=sa7h Ql2 !ZˆaYXcsZ9V+<,cQodZ|7vMΏ^Cb|;uNϦ?ml׮s&68Y,%@ s;{n&`w]+1ʤ EpߺGZ1Iw6WJܪWgOBIU:NpL*g"iw33; ¿N @2q/v$V#J)eќj_R3,{u1P 7{Ny<8,.q|8PGbMh,1'㳘N}ĂbۂKv#Y0)r$-qIq&?|}S:k ֓7E[ﵙ.FIJ&CtFQ&_5ZC]&O>"t{T?UF:-jr,Hv*jRZll/@iGNDg cR#y$:,~I؋Ļ $[d2vȡОt- [pl!q7/Q1zmƷ5ިl)Pv{%}>uB} Wo^:kݷiF6=i~+˟QCH9I}RW%ŰyM4Â]+abSV? ٧tz8zO1ūnX$F{Pn:]yl(d"o7=搴 [d7яVH88\t@!W32䁒JZ҆z }~FifÌ'(+g, M_aϥ)y:s,*m3(a%^_m=w 刲>z0UOGvʟu0C)Ʋ1YJ5;xi| BRHlQKIǰ[SfD1+:etѠ{A6.to>&p6p<| xs2V!9vH|(jo2@V!YTrq ǁm^E7.%vawl$\/w#7Bn@4"g $2BɀCű MXVexu q|jM7N ?qK3HrZĠQE.fkǞKp *2,^b`'X|Ϸ>+WLhTZLQۅ2'vA %6k j?hmv㩧V%nd'k4OF:[xpK_;t4u~P]c&ӗ$,(lxHoQ~=H  %qNۘ?26ݗ68:d~"0^IMH(7 AAҿ̂xy|.ȫ x (N@AG_,`sρH^Ő\!4 0T2\C>9МhOo@髥Z@aâB,'\)ut][e@IdYI-aL@+VX[|F b4z&Ū)/\VM̂WO@01hMZ,x96:쌭d5Qofܘ5n4M ׂ8Q[S,Al5hfɕN> f@3jll58,AkF录xqحkoԎ\.n߾}oȾ%kAz.+_i9D 5MXOEg6fY]@2ox4ȩ}PC@[ߔ +Dur}S9:ԡ{nG8>q`>KOFBɑ!vڻi} ]W!?\#V'@` q8 -u춲@ME / .8 J)^I ޴$}Ҷ?nvs6C /{5ڼ$-rt/%d^eˬUE.jy91V(}SLkVSʟcKB7a4S+;mNPn?"Jψ%zh펠_2W^x˷ )yf)X=2=M@ NK¾=--orvJͥ5: |t#NLOj\Sj2*j5@>2g N Tf-PƺGտ[jg;ɵ B /uN^elZ>ʯ, 姕megՆ_.?bbT_I' SD1PtFkȒF:F4¿ҐeObP I蘜[&,'rɖ${܆8 |kI6FѿBZqCڄr mq;|ui HE%fuȠ0RClpsP8wa3 ΄yn<Ks,GCQFѲ aE64/~x.p>Z.Kʷ5ېӽeϯ?oPB2웠9U[ k4R toU? Xހ%jyc{WOyR|^50Rab뤥哱rh,nu[hA*c &siWz(Ȗ9)`4\_1Z̬ѹbWZӺ͗}# ["*|DeN6)/9⭰犂{DߌGƂ"=0C k/S,Ymק68]wV><ܽ>9B.\͐/-@"X@k<{ bgC{2D(Ȋ֐_ԓ9 .\%wǃ ˣr.x$^ dE67M pus573"p3D7\CBumX΍ܒv6J+K闤7H" #鑓!RhHy 7e;^&CH[AN(yO%AE /`Gl xx60H[ -t✊ͰrXִ5Кv ϯ9ݷ/%is1zUc-~c[Y=2uBp繧fCuvxC#DSfqB#rט u̪|9B>hM-ZuQې ʱ|J̀չA3P R!T+Snhe񬌭 =A7t :yYkI(MPB[Q:<<@9eݠ,jrpεYw˲dpvw[#=f6[VdQߚ*mYܣ&|%z6;i9$/ώ|-?ަ>5Vf|ӳ|*_ Yd SYNVrMƻ a>'!;FYd=sY|ɗ|IR5r\ ϖ? &Ze/mfo %[K W@(V?d3&5\ )hn(XZ'ug_RPR 3K}Xraѣ%s. ~/zל] Y޾fW/uJ<_ynzE `dJ9>o֟`P%)1(ʠ*+'G)+k@WPEo,Rŭi5lQu484nrVZDZf5}WW;[SvOy5f(zքRQ^zoՋo:}ŒO:ild#Aΐ,Hk+- .oxDZPwZ+M&0e r,F `d4xüKCm!Dt$C5ZkCuջjֽ3#烜"2r3n] o#Ї+dp;HXnLd8LI S8f)ۓoGہۉ?D ʁ22 Lc惆4?5_K)$ȡ Z]8n@KZr S\oJc +yH}Pi!%_vn۹佛7svqt;A;πW.c!ܿ ŴIস@&qҡ₊-/l9 ~zyw@uInMAgyi']聅.>qX7lٱuv QYs~wA1Hjyڭa5/#u^VGKA  kьT @_i:(-)WvQ8cWlݺlXr]5x6K/Z|,e`Mlݝk:öQٖEPt<W{C. AޓP$p+emʖMWQ}7!0n^%qR[KR%tɪ+?7B0A6bcBV_8Al:iQ%Uİ~cihr 6 z*h~`tc-͢SдW׍cUFATpXxjKu;r>/kdsaY{g/9j|8qqa55 M/'wxmdb5O>`-4e4!.kk"EACYGAΥYòojNzҟK?()ȸ;FƓqCFɐ*y64Z`p~X;!t*\KwM-O/=T qob}k ͌ *·UsPze4R-P)J.n(kCEK轢!Es|R#!vY؁J,gd9l2ՓI&ՀP\ ׊@-q&r:xսvPpٲ!o[PP7`]G89hK[*$ԐF4?>59X\u;.Zb-ͲX)\4@+ rcuk=4d^T(褝t-Xc`@AZY< 2+< n%'&kZ3ku m`^W,՝㠌2hcthsp>uEgD:FDt~pIBֳ &~b1r nMնff1 j\gM/!KjeMPLx/MH'їd,ִ& ĈS$Arr#'%Z6 9~(|7 B] w4;^pnp4L/ v4io B Y'ˁM{pH7p^].+G(j*><=޽UB`=+sݡ(: _àĒ'JO'K<r-f,MiFSch9">wouט2҅OuqЋa@?VrAvAPxέ<>Oo"Tǡ)Yy-az ceRP2ȾX,~ci}0^f1j a<]WYG#um=L[kIMX zZw :vzy 鱻b?Kؑ7 ; ށąBׁ1pYh@16ܲSw.99cى[G۷/s{87E;hzen8^QY2B*SLڠTAwLۆO7ůP%dy׃kͮɽѫ-!O'U@R5& 2Z$c xlZ]cJ:s} ίTx@X^n[Ld5p/y?4fooF5֬nQ'u릹iIAJկd%I-҄3gBAٝsovPDGW3.Hi'BhrVh%j:A[ Y2MLd $kr/崡KoZy2 \;m Bgk `]2T'oA2,+q'o_oQIi6=uk]]ԆzysRUҞ(^_Uu[Z0}jED:7zۆ` b+41o}VXAUW&nX,:Y)0= *[f#޾h[v Xe),|_(t6*k}p}5f-kfZ5j׸fOwuoh'9W3´mi-:ynƺQiNKl .e+$NOy xnǥy}5q^^ Mӊ>p8rvEpzx}ZwD7D|gdd<>5~}BCӼҽj@C7tHhEM  5epkgduyY`%yg`\$RHlN珃X@Ue)J-iS*N2(6$֕_RM㏃%dUn"p K]'s ?S9B2?PyN7{};|A;'Z[KٸV.AٚҹAOh,S>:Y1uEoYc DO3m~Y]3G+[Wu\. Uw*59PPP΍ndd/]25l#Yx{|PA 28[ r<)#@R%&(/S&4)p'sp 7r=d iN]`d&2XJ"ͅ.YbnW^Q]qK<-GmKt[,WWz's|XRv%lZ@1zfj{:bpb36a2v 10| *AͲfF'[R6QCJW:(tͣ0H=oАmB6d9sNmQc#A3n 9 jGg_ٴ{k5Z-j^Zsx3g<Ъ,:/^V‹"]gNz~nG&8HB>Ju r1PE%q E@:%O9dDԄê~&WBk x~m=D9LmޏW?\f_Lf|u;*lU%^sZ_<\SO˿F:˓2&".xjgY,c [f!k䂕Q6l?弾L1( ~eݪ^(y, SW Ơti_yb__h ]BQ,W?+U?' L;(=a[*c0Ekuƭ5Ri@71Xp<jyYgMͣPHȳ'fe0+&[F fg5ja:d'wJmwl{x6UnA6yݽܒ-vѓD~iRڴicY}pΙ5N˪YIi[RȲkދ|]PJ(T}wwwK$>JX~&Be9hs!.BxXDb(+. Kdѓ /]%$?YFp⑝iٱ-'Ķݼ#\~|) w[4IȟjRpv<^/U"늬eV6|2{A,]/`WƂ aƛ7>L4jE X0u4,fEeE|c`@|c~ )r+Q&"x ӟs5\`:uzfE 3aWX9Sy Y`B7F*EiLig%+,`GyDn_Yƴ3K5F!-hzoU-Âþte\L jAԡuܻiOJ73 ZuGGyFzoUA/ßĿN???CI5ՉohYqx%ו|XU˲?e+?O=,"p :ę'3:0xAz Zy㥛b7muQUTp;#0U-6,QC ([_l +PRpSLֈJRj~:b} Ѹ mݫdZN38AFQY 9ԴsqFWUVS bst􁵎gF֜:,Y] =SVQ8ۀؤP~+qTω;h `2X%#+6 %J+^)`C0 @cJ5uSKXsSڙYX6 +fqm({)|R鉕?׷K 0OQ a5OyA;f8Y]_wJUekaktBk\r[,BzN뫛 <t<)~ ],/Ay$۰Ȃ4uFb֙`t\x̒Ml#ˎ(3ca1ܰpz bQb ;k%h i`Ж^@я)u2n4X2խAQAhb+l\ $4)~_R%_j+ 6S6:`W[gc)lu12-jy 9c X<hSŎA]vR,u@ ܂eX7 X74,8Wu01_Cq1E7,I},e]Ahx Z,ZtܴXbX@Và9S޶Z=(>*jx| ©4SY%GR{|lW^WEi ,_lgmHu83йalAZV "[p  6 b)~`,K :6A;F'4KoDen ֻVy֐,q~0ڧy6ZRD l5\)gr 7H<cنahPK< `А Uxd~mS*I|:& rʇ, Sr>8iR6 %AUTITITITITITITITITITITITITITITITITITITITITITITITIT/tNIENDB`pommed-1.1/gpomme/themes/Tango/kbdlight.png0000664000175000017500000014442110546031402020314 0ustar julienjulienPNG  IHDRLDbKGD pHYs oy vpAgtIDATx}e|W:3n@{w)RbXPJq ťŵh \s3g澗' }3gfgp 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'p 'U ='mZ6 Hx+@ΐ3n!B.<2~z-bܟK*YG֑u!v]aWP 8s8gsgOS|'d@d?W _eIJ/DM-­QFY|CcCcCl|qIB.Ğ>|:l;Ļ?|>_~Sk B)o npp[ֳc;(ld p @X֟%s\vO^(od BH0c0dYA2.x1r <,k,'ir:I'$="j&j+ WqW=vJۥ+n|tK]4Y߳'q(Pܾ֡+N8p1gɜ%s0 E)nFwtGppxٳh#`X%Vd5YM!tt%]IWzfYk: aCtQ^Nn@8.@KDK]]Q4B#4Pλ`%X j&l&i'$nDYEYþb_X9$$-_%11[Zfl&Fd5d AyXP[X&,EmO M M X%J``،a3 t='.[`n@p\]̓y2ʿd=YO_++JR>_ʞ.p8Bj kZVpzzx6a5v-gɆ=3hN<]؅](Kci,͚@fdT - ˰LD{H4>H>g LB]E]!A^0oI dD6 X=Vc٤i@A\!I.R|( 44nweޕo}&ՐjH5̟5/k^֋B!=eee;9͛7o<@6A b|({ шH ՌE @ eb!b!["{`NuW˱'5p!\xvlweR %ca,ȃR Vf>F8$H) X vgr6cHr#Hk fȹ@+ ƉLa0l؃2IMR̷f퀒8C81 "!{l>죻X0 ft坆yYJX a!7nI{/ڿh}Z7y>i!B]w‰_y=3<37i51nC&_=E`MZwnz'X~H Bd/...G>ocRǤIE{Sw;ݹvk\.s`+؊|xćc?cޮl&D$88XVU?w>#wzyl:1B#6rSTs|%q`謡 ' wv>gcƏy6%i׈r(rMm((iHC>'%aF`!Xr>AKV[ZZ4www1cbտg͞5{ pr\$=eQV҈4"H/ҋ gx%r/xHgQF=߰;ӲHFrpY|o7LQ%P"cejHjHjThw݅v=W\sUnϊNp.8ME(B_>d1٠}VhVl1,"EAD)i,9{~' µ5}rdt9r4-š} ,,: J m;v` BPJ(%=c3i KbI,!d2ޕ mCRcZKi2M~TŶڶڶ:m4ϘPvB es{6}0c熝vn[ZZLշW߮Mng_ gd϶tB!j1vw$đz9P>h_о}I=t=t=c#dv]d 呓w;l5[̝3w1-x ~eV1d YCPVVBzoVʬY)ϧ!#o=vnλ-32 IoқTrrrNe}u׬LҔ)IShstttos }ǰ-1xy]w01pG6e.BKK=C? 艞蹬nnnfRmThTQr*2{-_y}g3.9i^t2qQ,#2;NSjf{I;JJsUdY'?fXZ,-6={7} |u+ QF"bccR- yBW+3\ .Yu[K5׬^:=%zJd睞wz}U^8w<ԓ2:eth3g؇-A湗j #0ښ? W+u[ +ʊ-OqdGʕe=dm 'r!.f`f$F)B4/K.ZJ-3f ՆՆBwt*GGG 懝gy|@> ʭ*t&L]Yy|% iB}tuuŶt@'+苾KO HItD7IO:ΨR J-$Y掝;vXf4 [&meRn?%^8\ܹsΝ }f`kF/C;kFfYd-]`?'?[)_JyuՑWs{y~`l6tr7˒/bnH2|/%a2&ctS0S$|OZ?Gs=R&1IY %P,94e~X"6k `, 2)Cʐ2Y a13t]DY6bn ݤ :i6 ZZZ z taaa(6116 aY7ndpqV)FbB+ )dAo☠!VH+h-666SHYYYIK%4eVˬDDD#~TnK7 [XfAmҎ#܊HS1En2D)|$kfY?FbV#2Jn_ZժVxD<"LdOqٓ+*n BB!,EH]Gqg;Vi%`fJh)cX?ژDH)+mX4fR*I%$U:O&I777"("t"q]ȖN;JzB%:N0!TBi\6ͥaB$2)~effF D ZPt72L:AQ7.e0V+ܥ S#͑X8Yd w=r.}.}.}SN:ujn8ϟ?>`cc%Kflpt<)VX0rTRT%USڏ.7r}UN8bҩK.D׉rnRi\7#H?Yg1y }7y %B ړ4F DSYa,%Mb(b{<̣NQh1~Ot%[VUR&Y݀Or\%Wi7A7X:º+=Y<7I&$R/|/MsԛFNb'U[ݷ7eodO+Ҋyg)RlN ;)| v!./ ?淛Jka˄ ajYŲggd.tA{rةY|G=ztn_Ξ:{*l/uuu5gc6,H:Nww{ii$+J d6MƗApk:Ek`9KΒt=se̕fX'I)!BCT13$7}ƾa߰oY, .XUXEㄎBG#(%KR@VUdTT HL:RZB~!RRR111U+n4QңGnBԴ L+wZEAAs2=衇,VJQ:!qGf5N߆f 1JE(irHDDDKK#:ΥsM$Gq___bw^M&i$6$J$*0`;-ӆAx ^gvF(% e5X V 02L" ڨ-eR!o)EJR,yκ^wQwQwR]b%kmb\rK˥8;8lpܞu' ^8y cX2~w]OM.Z|f,5'I~QN;iY{d@ٳge%KB)D a[[[\1N|lzަ'-B tttd'GgMQUPYdzk ^FQojܞ'^o?Z幑bXyѭ9OƓ ;NԕRקgG]{tܾ'p b)S9t ׅ,&ef$h؆mG N8gm%*)cy DA<2gYq[!]Hs{N8 _C ZAܹؐpY;Ⱦ}5N8 _vʦrk1_M!ȅR/LfYn_N8gb9c9@Fd[ &b"&L:S~tA`QG]p 'U !(dQ?LOHuRT}>;N8wo؋gfF0缴Xa5 Yy^@ ;N8woX!Bps'e5v]f99M؄M}N82;7'렃.l^x?DfdUDt@N8sxm,| ?h'ډvO9cxYg+b,>WN8 6l6~O@  /:#:>%FQThlhlhln_N8s c*Z#|D>"%>ț7)o S 'x&l6?C bR aX-V+C[ŭ@J)s*p ' k,%KR`0\@gtF1S15; C1C1njp '> ot]Dy,;5z7K+,JͤfR3/qǡ ?9^a0B~d#\#(Aؗ/cߠώ<;OuttI=?N8_A!f33 e,4s >I2,{y53;Y;0@Z"-x,TUli%[# iH?+lLJuku4.ђ[7#F7 _ _ _dffff@ _>OQ Pr‰"?Y])JzyyG]E[)|/6D[-S?Cxn_?ЫYftc1V*U DY~wro!c5c'! I`,Ű>iAZP@b'pmڼD='}І!mViU'R!u,D)BG_ ~6X{֞3~nn5|C=^^x[q??B盂mw> 0@z("(* `8c8/HOғwC{o(((q"KLZ+ vh5Z5Zuu]q#-y 5H R#pf[ l=KHD ~?K/]#;/<qII ?uֽ[vGGG';xſf0dCPUGGG#!J6Md```̶2lZ52SSS@PPW+p,hD#@:ґެ7m uqt8cgYvOGȏ"A5K%5uwq܀崠$  v 99gxqjqN +®+ė^>^~='??O>~n8v ;hh4! #CП8ON &w8w֘5f^t?yu @ɱ7M{ti4f yyy^:x ֑֑֑Adv>:Fa%y/3116l' 5 @F}m0ϕcwKb<<ڥj]K/mzZ=ߙ(;1& ۟7ʋHG 7<$hh8C+w?6ͱ;?'7pu RZYw4|IA RqׯMldw**-^#/J \ ?@sssn_qPB=;9w(hOa0HR,ƦiPh(4RM 1`av@ODO,)|6*{JǷB(NN@}Ui B-Բ;6fP} _d#H[[W |ޕq4ţW ?C |^γ<11¶- HH'_mA_kl4v]`~O `Ev%\%IL=}˾ej`"?a -VYdi5@4-ŷfv7X®|P 'u:@Ƥ1s+Vo7ItxU(y䵒׀nwYO֓>Nc.+R^]wazO#X:=Gs@Ac|*]K3K3K3nKu\@l5[ ȽzlꋫT`_' ؏6`6l6@5a~ ˰ @qGqc1N.Qv2/W ֌5c͠y !}`36c3vl7ev⑳ 25eMYSQMXEVU{| `7vc7v{1GTA <_8xxh{zA(~d?&ՐEUTEUh;Kʡ ӝgzƋXcq,N/~d}v;-ܑPvl2& v }W_ѲWUl\t|v`cb,bg~h;xÿȈȈB>y$IB ZV>0|`@o@^߶h%/xHEKxg@y< %#%#%JH#ؠ.4ӼO}>D{^^^h[Yox=m/X sS j8QQ<1>U\U(2vk`t2܄l'5TyLq,; +4##ȶf[~hEZV; xh`BL0.!w *;Mt8ufY ?CEjiMm.\(( ţEzIzx! #ZQv%kZSjҕ{@d/zrRփQ#u'ccc@VRYDMd{111h-ZxG>oFm,w6&$bfX#pkUWfSVv LۯtI#NwVxPC(SqvbqϛlcV 7ܰE5TC5h-ܓ<qgw 92xB1j(UǹaIK:FQ>%V'e9mQi؉iPBl<$z^q8xHGx#Rn +gRITA 7r 9@ })PT_T(~g=``ߛ#^W}ȌΌN 䬝#<.w@ÁK.5SNCo-RKb?ēOb@<7fǡ6gjdI!;8 9p;`-{41Y4fqqq4M&MS}@wq8\nwd! =C^E~?l4>o1i*˞si4V TQGUV [wa meʴ5͚fM5H#4YYJ s'4ümd%=l{>N uq~~ξId~^熐NqCi<ˏ:")l w4%'(I2I&EiQh/{Kh eAEɫ>|oZԆ#ۊ!3yxN?$lٶlK\HGO]s? 2rb$ 8\+ ZR@ĬC7>@yc*P-Z p=@Z+f* yu`1gϢO4ﴫ^@d[t- ,5#l5m5m5 k92S S S o @?ԜݕѲQv-k@] u}/gTC@xׯԯԯ  +c1F: I$IP_`DH!>dy0 5vRT#մJ!s⑫AN9g9Ol&B5\ʹ++TjP *s6RtAU;DCFd4-  r%g1)TR_pZ&/D;/NC+{wiNUw^=v0nq<1C<钎NJq@p'πC؆|ّnl;Ҟ)72ZhПן)!2mxa ~a?~zB)ՍX)V g8:`,@MN65֮ąx!^Je[VU^ ` ʾkZJFS[ai ;ZB’yw^?UY舎Pvv YZ&2Y&(An@pԑmC|3l Pg*"VA6TV 5 琪):`` {&{,`ϪJa%#Ǖu Arp;\ C>%?,t&Ig!!!1AU l!x.7dx=Th {C k6ߍwoXB%"ɲg8ow_vJ1z J]Paaa9m0 0 mhj!Lc-B(d'g'g':::XZf t'IwjI+NgT+V sN/ΆFQoHiRZ$x#1,/9mN3Ngtuur" xm^55'+]=eJD8n7l+<=fB+ @*\ Ȩ}@ 44{=?5 % %fc1ieQp X"KD3@P X!+V IAzB=t:38`jVʼq8@<%O@X.,p>}* A yJ!El/{y'Wn?o;wf 'of+%yNt: `M5)x sa.ZZ-lE"a4U0!/[QE$irZ1^f/=dC:::0N4N4N oޣ w4[-lx[fI42LySpq1Y|(> k55iMZ`uXVvvvRC<<mm2 H>Le||/$HQW9_,,6 dKFFF@?Y?Y?T0a.ޝ;ۅ9ZEx9|4#H3W^}z֮^z^xwX u7&Uʬ UW3gcknknkMM*>0^y[P\ /8+J:ΪkIl1[C}#΢G\=ڣ= .۫8 '9 VѶQC+\~k׼ '$Z9s ۰. >r;ǂn9_xݲ=8 b8 *M Or7 I㠨s- @ұt,K.>E}^(1oW U~F?iӖ-Z+Z $`Φl uVY "1002f4]A'qrrr1(c@꒺.@d*b/FUUUH6o~'$ vV@v:u^Uݳgwl [/7ȯ J&9Mi4 Ⱦ}+ly%| `c1j?pJ6Iƻ߆\ :ά.֗$U[|ţ/_޿xd YC C$ ;'wN Tx{ bi,,,Ӏ#nGYe )>ŧ@Ä 1kcʥK? E޴޴:H 3%3%3?~gn湙f ~$;(H*@S訷?fݚuk?J dKȖ-a` ؅,nA?$H OF ~VlcUT9p[ǯ1G; 2*ctDGr:p X Wl5l [曽!{C}>eBQ=~{ے%o*"ۥ埆CU5w*($1rmvlbQoK%J]G+i4E¬0+{^ HݤnR7[dy?5k/_[ŭx,i9asfAփY@_}U۾}c8W\sug2eQ(n%- JC +V:=Pطoa_h4[߳g}p1b(Q# @`І#NMуJK@ ہG!Bo4ZtLtۼۼo)R  $@ 1q 5T= ep ^hCR^7`xx}ᅌ*ps(dSC\8*W+JZ+HTTT>'O~m.Iwnp[x~!B" I?H?H?dLÿ́.BKj㑻. Sm8][ oMgYyh:X9VjK@\~qIq&dGD cT^Ub4:Dz"=M=H\ޗWfάY3;pT8 dL¢KODC~MRR)18_1,zDWtNa@ -BFYwRI"F̍ >'_bP4:NP6 &=>WFeT29aJy7:3:CK*;yc(' Z27˜x(/\IMn_w<9tUl/9j[qVxܑmYjjj逾@ҭt+}ZKU x:u, QdLx6M?\_ *X`-6Z.KR?PB;w<n<.c{Di4Z GtH]$rP[d#8ǰyS D@\..C}p}8@>!On]/ys^^ OPiGţQ'Iqba$! Q2tAG@+{qrON1l<"[-&BϧϧBy&d pNá?{<9#Mjڀnnn*T:0"t:ۛ +O4JsuxU(<.hC. `V^yBּI*l+٦ڦڦdK%`_+ʊϗ>_*B m,&Kr}uԽ3^eJh4ipv"QPh-Z ZO...wߕ+i4KA6Zr\!W=z={׶|~f?3o[nI #aI'*Ϳy tq:@?O&M޾޾޾@qpB8gcViSiSi dC!+|??ٚlMB i9}?gqIaʛʛyi*ދ{/|$nHܐ IGxbJnJnQ p/_ο]D;A)U '̻Z<|X`+exUWl+e#IKGKGKGh\s/=jūVlmmB7Wj yZ%+ EڀnnnZ%tu={mvPTRKمXa ufC>` @MKɓ'%pfgQE5*hդ7D\ޗǴAPD$0paB'* RJ)" F,\qƥ@FьE&28'"3,2,2,.VXaL2=twtwtw>5z^~PAae/VX MNB)NUr @ϋ|^sdLɘ1>LX;֎ڱP|(N^;y$"Eċ?B 0~Jc 6*ب`#d5J qTB)t +7hr I2I&f@8Qq>So[V ,V*Zh%MBmE^%Ϳ1('lch/o*Zql8'q9wJ$ȪIq~1P޴7 [ ȳ,ϲ<2%s5{Y4hdQ`C 7͡-\HFVգYEy'dZs˺ytNC$ ɔC)cwuONr(4BC|T̫W>Zk?S%'555/KեKSKSKShͼLy;/1R)~*~*~ xyyڃ v;q'EԋQ@F-6MeS؊>gX$dflCHKҒlx6>4S z?ZU'U^dE"v 򻩈Vӭ[M;i'cY,.뻬 2@ժ.q=\^_̇!mRDHiq1;.wxYf2weܥ 6H{nԊi^@,@݀SnOi+3VulP痛(ƛ>㻍6C|zIoқ& AUsrLNGyP[o[o[oMjAm: URFiIU'yzPeQxq<܁—gC<ڨ2L*Cf x* J[@ZLXXylGs,i4 Mh {Q{Nw*{+.R}> >49T@T&F?bꨄJ- x]NSv|R.AAAPs>yFAqVX~BM&  xU MTQU b :@)Is9jv5BͱiMԎ{oY#H5|S4GGG@?Z?Z? ńb{yÛ+6_̴̴̴ˡ6 k`+N '!jűPwb|Ǜ3XXXf7 @TAPpǍ? ɰ̰̰ ]2t%`mm `f`$If`j@1| O]ݧn_pE({}gH&ojQG@~1b5QjmGmGmGI2&iSx(Y|^ =2^=HHHhlqO{lE/7 f AAA^?x WD TӼ¼¼KҀaaa>)6x\ ef 훴oҾ\Kr-Bmh}}[÷1ݘnL C X*X*X*kkk f Vd55nmrTiu q🊧i-h-h-<|݀' T ՠ^i4Y xY0u5u5uS271717x^y @X/2qL >yLǀWWW8QѣGEhp4.^(C- @ģGi&a Z(O8R{~GݏSmUrynMx1t-h _+$WHbw-7y.qrDأGattt&Úa~k_~kkYkg30%XVkZi+/ce]u]ƾ{Oa=666 7p; $ B2TOH?~6,@oy<\|vJ;)CS>>>zR4d-7X'g'g'g֏[?7Hn'\Kt- 7 cؽ7h` BEituuE<itfbX yQiǭ[hZpmе!@7 t`ee*Tg. eHʓ˭˭ˁYkH, ޢT<{d>d>d;Pvd]ͻw5hk;`#8+c9c9c9l? O?\ ^|6*"'V޺www4}Ih<ޢPYZZB [T\NLJ`@ pm ބ5aM>xt;N}FA %<#֞wJap}}@tDGt"%al4hAa0 NQr.9+s9Ea;RE5qE@8=5@y)T[k*IE*R:xޛBOd5YMVk[?[?[?'8h;,e`2&c:֣GCj䐏srq1|<x 7[ztѱGG!^st*J˟/?s8/W:2IVR+| ax;OMM4Z1x4 wiAZG W/r9ر"kYHq#no<jd6nWWWW4&$@*, k,1~~~0oo...B[pwlIIvcsy^q\ASc+72. }>bi! 1)ød;OxCNlo^j^j^ H_H_H_h{nC݆_`n̍ٿVXa /<~Ӛb,ērrU~Ki$bl q>`OSj)DZ"-BJ*ߚRr*xQB )CRKxy> |<*xT$ݫlo,Ex[WВus!B{ct6MFg}x!iH}}}@ƨQA }|ݯr*E.ϝ;=w$$DhWneGek Zĵk[3fn͠H}>@lllll,VG oaYhޣy=yj i& >}DO7noq7Em}Gr E@5` Xh<'MG(D! 96@jf/ IZ]kxB,l5l5l5ĕ+Wj&XW l6q -k5FI {akikik XgXgXg8q8le1w1bŀ^{9.$x5Zǿ??q}0O ?A7+ej w&@O'R' jVVVjyRQKǥ9=/*:*:*>}"PtҥJM>֔mU:e!e>X`!p{W?_ZukխU@嫖 u6 |ggg?~[ٗg_ TUUA 59ɣT\j!?]IWҕG~666j( Edr7J.:::h4)pz~Vj:@guF `  @ y\_jZ#N;MsJ)9ZQ#h&hdٟf ʘʘh<;?3:qό?6wuuur1s 2 a0ȅɕeUY%{ϔϔϤU[EjyaKNZ"qbpgw"6Dl e e ei*Ffmllkײ.]l=PjZ }&}&}v~\.r`khͯcl].[ՓQoQF rfșm*sdaَ؎؎ٽ{e 0 #=^L\j<{ͳ@̾}077ηۺC9 l m m H J+oqqhMښ<9ig)l؄؄`ﴽN .ut +Y(Pf! 62626UUUFh&vqZ}`PzPzP!Lb9-|geDۢm6TTTcG5t:0w5w5wXg֙uJF9 ϼ> {Ao!XdcfgιlPͧ~?os hr]JҥL?n3U10<'K/```/IsdD&i]*W3ǭ?YX~h &\iZN~ԤV 8{'o&nyyy^yk7Zy4:磫uI`pv8O*]͉*! kWkWk׷8J] nYqVK!J5cկ "n[8N6Hv!$X{y\]]]h!7|if ##ZJ}%s$yKKKx*,46bi^)Sv`s9n H1RL[}-q=zHo> 4%MISzU kZ{&*S^ IϓgGώ&Ey{WeSpÒƈ"N- S)g0a4C.d=YO@O >XXXͣ }VڳV+>8 r@72Y&JWBw XcɎq5[hl@Cbi2DAīJ2ttt(ҴH"M>S}j2B)D(={`,%C_|G(SgSgSg趢ۊn<{<-Ǯ,TC\Q=3Pseg._!CڤIk':we(o7|ww]]]};};}; _|M5"jGԎs\|u@kk+`6zv]gסIIQk')odYeYeY4Wp^0~i%>Tz˭b וiΏ߾zyEo[XZr,1@)S5rY4V>>>$:N*(&fb&%#2®\QcO?FbŌdMΚ5s9д`OnX!=MOӀNh' A*bk~@Ȁ#[93mɶd[PR( 5 }vݷ;B'bX!VY <xwwwivEr\3jϨ=?,~*{U* 5H h!S(BGkԿS@KեB)Adkua瓞ỎDs"FǓ{CyJE`l *TE"bp4?TUU ;v&sl^Ֆ1jS)\&Y5估R$AsQB!qԼR.uPUV[@|5VV{q9Q ѨO@OOoh1iLk1t.WUVZ;;;@’% K>e! 뀀%J*u9uFע 4@ ,s,s,sS1S1S1k?@fd690#ېq]v)>ӎV:^Zo&\6ggΞ> s9ZCnpyȋv5`M{%JdʨQ GUMjjC!c%NXxkڳO\|.>Ղ`-B5uR(%+Š@+P9 ^4 \PAb6fC\͖xC!~|票 ,X((,_ǟHOSQ1HnFi4w[߿ӧO[;%w߂:_|AB.]CeIHåp mrɀ---/TO*;6;6;kkkCR:o&Iؓ'aԥKSfJ3ide.]p|t>:h MNIE$/@] ubVƬY s-ZL3t2L/}}}ܰܰܰ`>/8~|P:.qY,a`xnxnxnWP{-Zm׽~eM&=/z^<; 4fiii~~~}_u<$@HO?iu7\t#H7 hhР4zI54o8)@:%NOW<]tU-ZV5000W]ܓ;q2:~w(S:-8Cb7p)g-q5]~:~/ƩT" je4> v%ZXZZB+Dل !ChM^7k@uO=]n l>6τ2;d=VB85GMo:}E_`YkYkY ťťNd= <|=09B1.a ʊʊ @ jī2LAKNfB'ıc2eW{^ HE" df̒@y& LN^d@„0 aW®]@-[ 1H uuu壟Vabn| DŽc'.O\ppp[A]MWՀP@( ?&0%IIRH0$aasӽG/C.3du F@GMx4:ĜEg.਍f7 Q]ؕ*N=!1\k )#c1^Nޘ)M…);ʗ;v@ ce#*ű83g@ȴi!  YvgGڗ#Ƚ_ͫ6߄M m[{L+Z%Yc4=r}]QΣdMʚ5 f9^۾IKҺ.`dd5&nkk kHo:?gp15W  Gv+ Qhυ*ݡXUOmͿBsN4' 5u_ÏWdYEh$ %tD\+q[- ϋPXO'DhMY,nDQE<O"4@sz,/sw$|'8tBBBM 6*y eCPuf̀[YnetVXIl3&y% g ``guu}5,afj`߰o7܄ʭh2u/ "Pb2P\V{S3'p %ż7`N<1F3 _~#PXs֜52xж9( eP_lEU6yn-yrV[ȌWB\B 456565z uDhIbS ׼Jr+1>c|xhB8P(IW6UsK% !CdC!pnF=r*D@Bd)YJ=#zF2g>| W^zZ2'^P h2M[LաMr~*/K={W\)rr;vm!=|D~I'>P[8oL1K_N;jf]7taЅoq^zz)t5jUhbvKK< `nno3kZu96yw,(Sv\; yW?W?W?;6 ;%4 xGxGxGnnngy塵:农rrP5Ǡվtw[c^c^i;d7 K%mB/ROyՎ 'x~%kW~HKRGc>#^?yF8+>| zGvvv$AK6)[`+5ָ[B /p9r0RZR@6jO [oд|l10yaB`ggg]vr"@ICqe˄y 驧g\ʹsY+u//8xg1±s* V6-FS$D(Ρs;[ֲxh qY~p%7ann=mBΤ3 Os> 0&ɀyyy=Ti 9y?,3g@?(36y?F &O [=oա֥vYhv1FUVI Ǟ{~,-j(tC)#t]zl@Ue[VHZ$i pߟLט?V\9iSTh^9nTO(VbZ@Qix~J'5N܉;u"hCEo&L $&&ƾH&K%8,iWҮ]oq;`gh2*u\4qaą@!C+NLMMGsWqn9DZp7Q !/|9^ٮ|x+ o7{ mK<"#@(, o6hb !^+sa0\iaTS_[_[_`eYYV* Gl 6ď?@ İ0sO'zP[zC87ܠC=ԃ։C=${@9dM;{񝎲ڮٮٮt¯UxW.$UΥ&^uxR[9nkk XXX/K+d3}j)PHD"22 &t2+W6fm7ndzl|؝U>}n^Cu染() KФx_iVnhlhlh Bl!6 2deee@Fd4|!2 xAs)=KҳPK DUUAKr+3RC߇O>5LΛ7;o6XZZ()JߓӸV]acx5SçTuE}>LxqǍkkk#^'=?p_}]RNigYey1c Hi$T5?P),;G=z % J϶=l }"}"}M#u/q9g TC9AGIb:R^{1|ua~͚5'kp|| XR-ThpP^g:^',RQkU p^qmddjjjj!'.6m(V#b3YuQv$*a~;  wt]^C=&u,O|W`Pgۨ3P pіE[m c1V[@vٍi$ c9)yH@мyA Bx{{k`"QE?ǹJٕ+ADyo^(<C?eRY pe/417W`FfYEd"F,Xd_Ͼ}Zq~!f 3???Lt2mWM"*uCÇ,,,ˀhj@9]ցo !1$ J(٣dk.R+BM'I~?_<}e<,%-R$ݾ}wſ+]]~vYD9 %-yo `3{|3h~s Dž@;oWoWoW覢n\oreG?PCyJAYVUbV$H8[Yle^~Blhh/uR9<i,:5=r塟 ^JN :TTT3b xX]]]V١9e\/;ʹ'En(1Z]!ѶX_|C茶~ VJ3e/-oDP2 lll555}>elA-#Oneb_/ٗnnn&۬N9+9TW X-ٖl=*M<)4X?~-¯q1=EGm6N>=BBB DգĶU)x8fS!Vpt6M\@؛7]]]@Bݕ/pʂ~d}d}''':\0|$H(T=9^?l[M/<5xae֟L_/F bH. 6fY"t㪍joa҅bX 666ja$g <'$^z~! Ҳ< anAd-bVJR8ʊ&o[0i =K.+=p \'/ ]Ǯ(~Y[֖gMz:ꘫ (xw,ufŇ7$x'ql]E[^(OEzHI}Dz꽫Z{ګݾݾݎ"@s%ϕ<%r\rBka64;nR En,b9 zz,qDb>PL"j6.$rDP ]#LO/=:~R]s P3ݕ:(lhy2`P*&|E2tThW+pȨ(-bKs! LLv KME-8i1룋ꢺ8Q0ၪ-b` |"DAP@\םN8hB:@J>Tð///TD}Q_jշV__/{s<7ynx~}{׈k5'ݓIj,Y$HXPU{Na7 ftҘ%9Џ~4#ͳͳCCg{^}Cl;Y />^|(_0`<{2e% HyЭ!K/z{{;g:j镥W^ $MN4iEw >х;f>\ڒ5C]<=) Ϊ!w?O?Cޝ= D.Ӟ-t}p%1f#,Yr38ʛq3nvf܂q 7b߈}NLAr*n~/9OKJJ;8#$D"ynNTYWe]u@Ԑ!QC` D#NKRDOto d,aTYzejvb2b2b2 Ǥ=E-o@ƒ%%'KN8,֣֣֣@R )333x׍]]]#C 92ġx1g_B< 7SL2V7u_7ؐ!sC& Wr.ȍrRiVZfܛqoƝ>}9`pQ45'mY.t/ `Xa-Lo0t'H U* %]K/O? )GB6_$¤We N<9H?cd7Mv_1RL}0A@hg 7Yrqu+^yEg vNٝ;|śYc:鋲l#I&}!PU}{"Y)s2s2s2;rȽLLLp}O]~ 5ԃQF=T_}@b^b^bM?'hOJ?]yCW <==_k_k_kZkMg&L ']QE)VRp`؁a?( JJ*4j 5 EtpbQ8Gxbۉm'Xz`)PzdI@ti:ՅjUUVuS'gݟ?XqيV\Á(/EheSO&29̩ľ9KrA`ZT1+PJδ<9Oj?j겪`jZ`_~~~@rrrrr"+K:O222d@ɀEk/Z{Z@LST'WJFbYT~Q:봮رxQDɟ%`o7ٛ={JP *4yVh8!NiV~)\@cQE=Uɻx5* OL>@A`{ Gr4 *=#=@ 7Ti_}!ixBv,gD:|/q93:I|O'aߐ!Zu؃z:݊]mȈŏG ##>}`HPq򸛼kIkp=DO[`X@lv@~.?;yl)o}5DYYYVN3uM:[vd'8cǧcV{a{m`c?)))Jf*88E0 <39m:@V +x?~$`_=k!+@JV)E1bt7χ`:e,%f4ES4S<@eA󚛠>"Sd9!  `'%De=+M*וA]3{5NRD z Wc 'Lfu8jBMZ}Gsp]jSbbL:kwΛΠN`}`}`=`v:jDH:%u 06h6˂g_KNp'M^ uք ;vTS} 2DpNx{{{8.g%u /N]?5`{=p0C*Q2d쑈B^SN\.[:t$ҁKv ]`1g?AAM|B5"9y@cZT*r@Yݲeu,;~*_sw_i;;;e&ɖ G]Q鄰U0wf/mmmax=vvv JR,~E.rc? f}}777:r1Fۡ% M KIsmB-`Y_֗{=G-9N˝; S)@we| 8<eײkv`PH#%uWcI݇=tPo;5h/uH9:y8PC O~S@խUV c}>PCM5&$LHxzz¡mS;2< cBDŽp*nY<}3}׍d[V]oI%}6/m^<@\/ñ4Z?@E/ mVooo8aqbKK*Grҽ||||k@ڴik#Gb!MHGg fff𷇁 b'ABF(^{]uY,nv҉^Hz!8i' U P3e&MHz+H t.0 R*# E(L7??$~Hc1o KKKY]VC 2)֊b-pƓ7jWÿdB @iT&^===lOٞdtp݇>\4Mh4H~/LTLřHńɖerpd⑉G&;혷cPtgѝEw)Y)Y)Y0YYY_d ٛ9樚OOO8\;fGm ߊ`X`ڠ6Q,Ԝ7b.Vl%?LaӁ YSfM7^8)d}p(Q680}o{@?)@tD' }wnʺ f._w>xo,d)#8@YPn_/jp݉v' nput '7!X4D# ފ-ѻѻ܌:o A 8_ -H3&x @^V28\CNѾѾ1%aQG]u1 ڊ-`W;ζᐭUTجZSX[[;Q}6`X/֋Ne`GQy*"gGJgi,%^Iz8k5.Tpb -~#QE=P5jBUzzzҩǭ¼ +g; %l|%_ &jM ~~N+d{?򾺟A]Jo7ӛ Į]ȿ*`:u4P;Ml6 )VU$x\IOď'HSeoXkr".KxB<2i/xX z`%VrZ0lGGG 8A2ÐP#BuP-nvo )(쳲nT( Е$D= Kޗ/ԯSpQ\=di^d{M%K ;x?@ o7iqgޭVHzÛ|ovRrX*N]n%]떳<3_|%4`?ݟu4dyڨjꬮj@4D3 )>)>)_~Հ=]t()()()xtJE2-*-*- ak}Xn잧knZ|-j,Yz = wynoY0쮬f櫏=-zqy;XՈW#(\Թ3plr\%WJ=@AJ./ """ڳkb3c3c3a [@Fp:N|C¬#r.5W\]s5{L?\B6=2zdHGx&y&y& %kh@㟃_>?Av.xF/jݷv_w&Ma9I*_vG)Iȅ9y|_ZV[nUPh&;% x0hWp}؋c/H%dqt=oVpcWRpXEI:Ƭ.Tϑc J3<-CwG'rQAdn|'Ye\ |\pχtnB 9GQ{N7סBwww4PSSDc0y\tK~,1`@@(dv"FZɓ\\\ D_}}L].6ON;3N~zӓ!y4Fct>bv 9xhq+V :$t0#1k@mۀlp[2o%8889n$VqZq6m9Y(Qr#aVìY@QҢ<хgEEE@|.#S_NSHIĘȹt$V[@1W\-[<KRbnNCSJq|Y 6 0hPp'24 O:5\[s-lfffZ֫phXXz@=iiiԘTcRI4X*MyI{A _P5PPf'%N6%mJ:%M>J5jZGs<$gBwDTPq>nLa')**·,,[imIy}S1c4chy_XzhmP4lD;H% PEUZE(C&/"GjZVsp8#Ւ9ȵxseiҖ9[vi8SWbafZ8j1^I~γ—. #L311115446ϵ3t2AYS֔5`6$m؆m@b~b~b>3/f^yu=S9qZ i]9R8fٴ隇iNMFCKZd@!kbq.}8- 8tS|L!|tj3P4縣t8y=3+{F& ;G4z,BY( DM5'ߟ~ 2 a " ﷾_@X?h?^7l{=؏q8{rA-2{e㳝8>#GY2kީ:(BBKq{r sZ895["" qZn|ܘ83Q 2|/N;`̇*KIÍS, lg:LCp>&XF2.(_iP$;ڹQwCuI4$ݚtkҭ@|mCާNjWluqˍkL?o|({///vS"˓SjiibX'9A-%[J 7n qrP1J 6ܸ6P7MrunR{8ͩ0Ǚk͇ Zi2\>8f1hq~ozz\=Slߊ0P0 @mNS@4 %KkVYf% em>rJ~%zYTײ_~-}r;;;lW . ٣3:':':ޭ{݀+\Q:=`pWPXPXPt+V KHZ!w 6-r` ұ8㴘Pvtr3k *:up>{wCƹe0XNگ5{0hˇog{o#7W߭`pH\6q-`FY`<1cr.l PtM,`{]if|`QGA[) Wl{@\gŷ/}1Pqur.4[0o!'o,C+¡e+A2B}*e$}hykhŝ%kA8yhIޠ@xTqfm-H߇loVD;;!bzz\`ɖ%[lF P+k`V_yt-nu˹~@=kQ/jf0M.yTG2?p<9P`eP2͏:p+`~uL@+(>' x=B@7h1>bv"=y>|Hn"]]]Dt^yMgn6~1.^|3\8sṛ~χVЃJ+/Op>EhҼK.ۮo;lm6.)S(Pj&@3(=δ>nS7}7aZ@qօ9y~oot?wœI$|,X1777[Hz` 7/>j(xe /Q֣<l̳1zu֫}5CG 1t[M3jBrEDD>iO+^YʺV]\5.j ,Y4%kA(`)E!R10)OSy1(k,p vbG9}moZe[=?S/MZ5Zrqj_}uM5]N1ꨎo6 =*Fμle3/;{ 6ti'\\ XWpa{1b6l,X dؙP P@^,/ VvxMVʃ2VQy#\'!Z!TDօ45hVZuݖq sB xB+H`S Ď;7wgb#wfߙ}'ќ|4_!:~)vb;x7f1㍳?i[&hh?`Pq#䤥Cз*SL2Q$@F ((+(+({{{Ÿ+h e;NpӲ+8ȅÂwɯ l+83eal+*&+[ɶzjo^H*N*N*n(' nwku8X@|'A{ ? h4ߙMf6O;kU˯Z~ to7'Kfכ 4/n^ܼttt! D@IZIZILn 3a0zHE*RL '[#]Ю 7;q||@uQ]T8w\ɔ$ ]CǙ^{OI)\ W&yBy'vb'j(]琉bX,M&Ȃ. l Y."[j A@5[y"/. "WpBVѹp@8# bc@ЃTq'BHB1C!}+:Q B%jZ"Q$B8L|Cvʸ̥j) EbQd fYj ߋa L5SD0\ 5C!qH©Ml6 wk_7/Ox``,д%Ħ߬YsKi>}-mO5ew8qO cqZAڋ%ިtn *]tGQFz@oǿ>ZΓݓP_~Žwn GP"US fu3$-uZp֚ ~;ǩi"PސU7΂17ԦirS>OvO+iyUQUTRX:d":zsߗ\^UUUU ܗ'$ksχbhfh51@gũ) o&pt#d# f5ϋ}@ψVܟ f9,YJI{;*:u4h3b-q ~?CP;`-4!OꨎyV]US5f-95IT`GC|'Oe =-<-<-O[O[O[rF;ȫVTjZQdt4M/1fCMLY% 3(ˆ Ĉi q㒗 FqG(B70A$ FImRB>$ȃ܀z[ 'h1(H1 &ODs'j2? =l `n7F'{-74Tǹ/9M苾f *T&m T {Aq6tцy}"Y̿s^]GϏ Ʋ/:7jڢ(Nޏz6yHizᔆ=|W{Br}}}Sa%tAtQrulT:PdG8G<Z(Q{`lGjMC MkJf0`i@E]mW`|tc7U+BH ;K<&hӓ檹! .܅B\hiq#f"p rawEWt0zKSwp3Ts\5)q7#cp,-h91+ 3뻳y6KRTT2kl4DϮqgyq1Vy7n|RO @pIH ,=lB6]@TP4 NI3Mmqp1>%>{ pih_ap^-\4lOձ]lہ9s7xx# j&\1ò`/tyuuu?NAuiX'6m(L G4_PcǍ5>p=~@z>}A,+dB%} B)PEJW۝nALjVs_=fz^.ҽ58c6{rq:|?(碡3a޷s-ꃐu@tq'EBclpYXᲡe4f9pL 7NZk6yH=Y8NjB<(h yr_"A=[V -,c:A34uA(r1P:tzt~燁= ,ܳ8{3137PT3լg7o֬YfB{F8Į33볁 4 >Җ-I[$HX1QxE D ug[^D˒3N˃wY]z2G܏,]prpq79 _Y5;q^ߏߋ00끞B1n G.|3^4AC*~ȿb`r_·pzOHߗc[̿{;s=qVϹ{>s[kʓp,]GQGoa>Xb H sKϼ~Pb,|R^rpg+;쾕O%l<~$I>/SB->M\r%g*SeLdM&b'QxΝv8q݈-p/u+N7p\0k^ɃpYݽPa{}^4QZGx^_}4(Q"J++{N%3Ȏp:;R ^/~=3D#hܿkf1nƸs7{/ ڋ%-?|Q-'-YbL=3u8F}#)z &<su:jynƒKf,9-wI *T4;w,%&&Pn} òw`>{A*:!x듸ܹ8 "D굡AhMOۃЩ?3LX==,Q0ɤ?iOBp`W68h#4uhuL ֿ/VxV<+= Ґ^"D\:WV0l0um@q|1R#gջ+ |hCpD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"HD"D$"9=`WIENDB`pommed-1.1/gpomme/themes/Tango/mute.png0000664000175000017500000023627610546031402017510 0ustar julienjulienPNG  IHDRLDbKGD pHYs oy vpAgtIDATxuTW.iW=wKpHE!@@@!X t]GUI=>c;^k5U~oZiś෼-/ag=,l|O* e8Smms,-'v J])&3|>ǡ3Y1;^Kjn pEc$EksϋLߌ?$udZn[3q|sSOQSp9 Sq8`qdbDoӴCrrhjQZ/$gh3-)H }Q1⣏@==ܸ%[(ÖEF5}Bsh#h 4:mm \&?&&&`ui%Dq@|bQ;#;B6^'^}bYGK?|^J8l2F7~,:ЏEOb{FO(0Xl:a}NxV '9B!2D~஘J*# tR+6??`ņ`iO;i?L`4(I&D#)9Knl!s⪿HRbE`® &7ɰ]!˭컝zՌ4DQyC$XW킐k2qxct.ulf3hCḿ8 L/3-`8h HM ,A/r u}5Ӎj^1ehm-ARY bP,dL@Rc}^(Oʯn ik5<+p#ci=~w='xFl6lvy#ƤN6#Εo&rWzὄ*'YZi Ӽٖؖuߺ>}FE?@\7o?(4dl'z&[5I-au"?kdڜ}C}ɥ!ZrdZH(oLo 韥Y|DU`<_0!P2UA8pH'$R.tgk^SÚ75oBSݲNK y}w=<\<࿹cO~nw͇4]0՜Xs9wibۥzgLZf"dܕk̞:oB¿@}gܫ;!Il.^F U 7ĂKC \r5lUB/ A?,-c"in}[j]utv*2]A_>ZNW.vs>;$+H5 ]╤4~w|ex34ql%E+X*\) (ذa8q5A<4϶c!X8oQWIMR:FNK9m?{ԀQG a%|V8B[T)me YAUIBZ ;wY:[ۃϸ87'b<࿙С`4*hw69 ^c8Z54݉hn@Ey?{#Kn: ' 6y9veV}WCͷTgCg}>52@{b9!~@uӇcQgV{+8)e9J >IVmr:: Л< bd,5㳋e# %+m,V,X_" _[6x{ގ1,:;yƹS߅~.Qι/=P מki((06rk@r7M>6H.2pvQJ9ݼ2WeL»I y bDI1Dxl m:҃,ګȝ3\>PR=K?l?ܒy2 ysyL۠`1!jW@.qg/_9K: WK}'UEt]Q" ~7Z䅼?~;O5zݨWW !8n|(drp|ONk!rԑ*%A:uAWO^.ݜI-T]!ːA%#H&dKQ#_,^_8|ҕt EzHWQ~Ey'ۏ5Wq-es.x|k@z]Hcx2W z /qL٦էE@h đNL!W| K>M(CiM"<%th\reP3l^~!VQxI!vv FY仟e>PZ e@Ȃ <ϼz9]kZ_n=ou``qϾb8;)\C}N RU+xAIʳK^&vx=8~fQ;);nr4>);Qi s YUNxC?ӡTx<=q~H t,Kj:~jqAպ8A뙉k7$oE(D塀_~ 6xZogɜn=6Yx˧?Az`Tlx/` h~s.rx _? j/YJ?Ϛ<`O`vƘ| r]%11AkS1G˃X/@S7ee3dr\s CbI T䥐X BR$J<%2g~ ήξ`]la|{M_߂Ow>_w[}&㍱[ΞW&\V`UguŖH*<#;$OܚxԩV}t౾K/zYRIjAg^U222^fĚ)I`M\xҽ\'7 hTM3kX?23f^}w5t`<`,D駹?68M |u0#t8~' -Zj"PY _P е@ot6@;W~,hQ=;Gg 1cnR=wKo -PTTW9V fg]8=*A4\ 5Z :j5\ ջc5X AfCĶ p8xx`x1E!jS/!ne\PpȬ,4XH垕ǂ/r B rṮ$[{{GPpd:CEyrE{=F0u/(DcA#s  q#_/A=ijaxӬW߽ZZ>@ d,! ^TɷR?5Z֭V5טAgf5t%K2F6ėK5;_a ?A5?1E/Cb.-6O/fVƗ:DiS-66zgAu5fr`wاyͼӎ Н8@_J@ok)MPI2pu޿u_)YOM%(ӽҹ~d\eDU@ $h&`d-lLn72f S^9u5ׅywB1z=$]NʓX) Z^0->s5R e{ǩA)y'YO5Z9C wf~ߗYZdbK7gO6^t{{<AU}bE)#x=yx/i0߳Do  ըM+ (C)J-3n7z-!T&ώ>av]z<,l{æ+ɛ2Qb^`Q <'F+TUܠiNM2@i@y05oɅ' Uk?QrL+{ֲv<uP_mm/Xټ-@כ/u9t%Ax<R)UuzJŗj`(] &=|v^z\jM!F8fhb`kgϹ T~%`4>>`memb ^m: ֎֒`0*ylt3оZ`Nu65%!3*Lt\ fz=NW%'䒟qΙw~{x}u˘oZj*gB>}B\ZtbM` nn^AQo e  Xp*HƵF48-hS$ :;lLQV =5.?./gB% B^M.H4׹ޤ~Y%gMk@@/~ošh/A!peAaF7"#ؖlԯGBu"k,TQ8-@4lZQ[ӾzБiS`Vkm E >9 1WZ m\_kc}^ڃERj5eq$ E$,zxVW{# ASf_O!k}~~QV`MZ^5R9-`+o2 moYw/4}W`e_y,a=YZ~r;1cq23g4gyQ-O5~e|- 0Hm]9 ڔ8h+ \;;PW;S2$s/p ,/S>VF"r)NIY^-{+7+ 7t!a^ր_~6?0s] ta5~IW*vǾ%7eFw9sxz9]jS~qq:'O52z *&/Xg(Yhe`nupl %Ȃ]|n֭;u >Ln=nf6Fp979J@9|s,r& 6B @8B&H{eȦK6JE 6+Y ږ';w3d~>;<`" +c-xGG!80;|:m$hIƕHõ"6HǛL ? '0Sv2c -Y0"%͈n c7~n $Z1D|=],w-,qvmQG@穩"߫O66e![BʁOz?]ͧ3i(@cOc pexYaÃu[GomIRClZ [6A c KL S 4zd f>pjssߟw&5OOh^B Zb$W 'I3> fg xK/@_Q=c[uH'Y@b?fHNAv0 9?8! h]]K= o@sknZ^ZhyIt @@9}x*aʦ[%˕9L0crx`^7aG嘱M1'm\D BQb@uYKuC|' K,bdkk@ICe)CALgd1grd*>d|3hk/ˌy0ǛNNвTciA% 7ص7`PLa bd`|:_h'ڇ߀̙:NG=^~~o $nJ<C6:7KX޵3 pb֠@KDH@QOV"@(} fTl7a-ݷ}̫HA:=>Ao"~ekkrU"K11jYۓ|/0L>`ϲS~YYl-lY#e `lc ::`e:4i!qd0sd0КBR~ d r#u$E9@ |>K=ӶBE)9*VCVI$z,cN`l1"$/8;( F."S#>+xCI]<<Okb Xs0;|"}K)ځ:ᖛF?m5h\m5R/RL/.*Z(xVE(2Nwԣ >WCe+y^$  hWdN<ҽ@Im^.![T&X.iO3znGkE3 w 59! 8ؿl-,GqoJ`|򭔑oA Q9%G'2' srHvD)YCqYI9D9 Yyy`-=2@O33(ހg{+kA2)w@xĉwQ(id8ܯ ^=xb]|z"u=M`[ti-kf`s t`Ybly=3׵.q# ,Ah9 р;\s4PKǿg׏?Mб@Ues 12SrÜڎ@"(guNM*)Ky '.ƭߙ(^,KL %WhU@[@h'tvj~ !5#VhuvO}--~[Ps9"c%'e` v'}p[Z }EAqS;юj:i:zoR7'oe *ccqYo9j`7n+k c2ղX R~#F4b@Vrڈ`#%Fd,KAV+drQ2ڨ FMcQ=ٸ X A+5ٿ ^oBR,=!53ui©gǞ&Cy T=_zu>Jfcs4lcts'3=~߱R_,F-wo'O|ߚ F4L_9 ~l{|8ckB_t.]ld&ݮ4K$R0WM+oE(@:\wnmB$L*K*zM}d@GmApsq>N$k?ڹ R=I-HkRC߷ǽo.s'bqbV R)/ rIH#M씖ċyr-@* rRb r eYzYllY+e-"@Hcb@^?I?~|i/@@G2 w Eon~=2@O uT{?/d-j(T&%/ d^Jp`z>(av}.;; r]=={Iuqf4#V0IVй6"㪎(ZG&22A_ =rDrǙ&yZ$QzO$4l 0dA&pnp/5J_{wL2RHuT H1)&ŀJTld7oQԳd_BIV4s9ϙ7E[2Ⱦ$\%i*YW;{iиd@NӍ@`;ظ~]>"QHef=9 ll]  l5t\ YS`{wOr:񦚹P[D_b^yR2]!ڱc.e;`ta'uQ쐮 -%HZ\0  $L/>HX/W%d\)@z d#|/%H XJZdLi`\QD@q=BOw*8)-L3ˁ$Vw.>v: n&83/)?ʹ#_A ~Srș;4/t1F=@u4NP/6uq-O||V H-W iڊ衡IԈl<z|f(OS iƻysj,8وBF0&aDChk:]?zzee$ثssO_w舁Ni/s,d1ZeMejsȻF]H}Z @Vdya2T`UFOJh.9"rVYrZ΁lB"Y@@I D;%RF di-, \*1cy tw?]O9n|VֹG3}01cH!(^AB<4dkRwnom x{G l`9uh< ` L!2^e\5S.2W]j[-̴Y=.D9@I6#J|{(1Λ,s)8lW;C@sh! ;Aܛs_V|]Cޡ6VV 1>3F֮:Γ,H.||7WÛ/bNXGoG?0>3>0>µkOm(Lh%Kt46OO"%QRLuŷx5<=YyZx<0O+i7@gH jj vvpXC| ԜӋ \†`l%p, `gkoI>'@2N2o>dܐM aP@z 0MK7