cvs: php4 /pear pear.in /pear/DB STATUS TESTERS odbc.php /pear/PEAR Installer.php /pear/PEAR/tests DB-1.0.phkg
| From: | Stig Bakken | Date: | Mon, 08 Jan 2001 02:45:31 +0000 |
| Subject: | cvs: php4 /pear pear.in /pear/DB STATUS TESTERS odbc.php /pear/PEAR Installer.php /pear/PEAR/tests DB-1.0.phkg | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-3432@lists.php.net to get a copy of this message | ||
ssb Sun Jan 7 18:45:31 2001 EDT
Added files:
/php4/pear/PEAR/tests DB-1.0.phkg
Modified files:
/php4/pear pear.in
/php4/pear/DB STATUS TESTERS odbc.php
/php4/pear/PEAR Installer.php
Log:
* updated DB status
* updated the "pear" script, it can install basic packages now
Index: php4/pear/pear.in diff -u php4/pear/pear.in:1.4 php4/pear/pear.in:1.5 --- php4/pear/pear.in:1.4 Tue Dec 5 18:52:37 2000 +++ php4/pear/pear.in Sun Jan 7 18:45:28 2001 @@ -4,16 +4,53 @@ require_once "PEAR.php"; require_once "PEAR/Installer.php"; -error_reporting(1); +error_reporting(7); -$pkgfile = $argv[0]; +$stderr = fopen("php://stderr", "w"); +$debug = 1; +$optind = 1; + +while ($optind < $argc && $argv[$optind][0] == "-") { + switch (substr($argv[$optind], 1)) { + case "v": + $debug = (int)$argv[++$optind]; + break; + case "-": + $optind++; + break 2; + default: + fputs($stderr, "Unknown option: $argv[$optind]\n"); + /* fall through */ + case "?": + case "h": + usage(); + break; + } + + $optind++; +} + +$pkgfile = $argv[$optind]; + if (!$pkgfile) { - die("Usage: pear <packagefile>\n"); + usage(); } $p = new PEAR_Installer(); -$p->debug = true; +$p->debug = $debug; $p->install($pkgfile); + +function usage() +{ + global $stderr; + fputs($stderr, + "Usage: pear [-v n] [-h] <package>\n". + "Options:\n". + " -v set verbosity level to <n> (0-2, default 1)\n". + " -h display help/usage (this message)\n"); + fclose($stderr); + exit; +} ?> Index: php4/pear/DB/STATUS diff -u php4/pear/DB/STATUS:1.12 php4/pear/DB/STATUS:1.13 --- php4/pear/DB/STATUS:1.12 Wed Dec 13 06:41:04 2000 +++ php4/pear/DB/STATUS Sun Jan 7 18:45:28 2001 @@ -22,4 +22,4 @@ fetch modes x x x T x x T x transactions x n n n x x x n auto-commit x n n n x x x n -error mapping - - - x - x - - +error mapping - - - T - x E - Index: php4/pear/DB/TESTERS diff -u php4/pear/DB/TESTERS:1.1 php4/pear/DB/TESTERS:1.2 --- php4/pear/DB/TESTERS:1.1 Wed Dec 13 02:46:31 2000 +++ php4/pear/DB/TESTERS Sun Jan 7 18:45:29 2001 @@ -11,8 +11,9 @@ jmh3@linuxfreak.com - - - - - - - X - Kevin Henrikson - - - - - X - - - Stig Bakken - - - - X - - X - +Chuck Hagenbuch - - - X - - - - - -MISSING TESTERS X - X X - - - - X +MISSING TESTERS X - X - - - - - X Comments: Index: php4/pear/DB/odbc.php diff -u php4/pear/DB/odbc.php:1.22 php4/pear/DB/odbc.php:1.23 --- php4/pear/DB/odbc.php:1.22 Thu Dec 14 18:37:09 2000 +++ php4/pear/DB/odbc.php Sun Jan 7 18:45:29 2001 @@ -238,6 +238,21 @@ } // }}} + // {{{ numRows() + + /** + * ODBC does not support counting rows in the result set of + * SELECTs. + * + * @param $result the odbc result resource + * @return a DB error + */ + function numRows($result) + { + return $this->raiseError(DB_ERROR_NOT_CAPABLE); + } + + // }}} // {{{ autoCommit() function autoCommit($onoff = false) @@ -271,6 +286,23 @@ } // }}} + + // {{{ odbcRaiseError() + + function odbcRaiseError($errno = null) + { + if (is_string($errno) && + ereg('SQL error: (\[.*\])(.*), SQL state (.....)' + $errormsg, &$data)) { + list($foo, $source, $message, $codecode) = $data; + if ($errno === null) { + return $this->raiseError($this->errorCode(mysql_errno($this->connection))); + } + return $this->raiseError($this->errorCode($errno)); + } + + // }}} + } // Local variables: Index: php4/pear/PEAR/Installer.php diff -u php4/pear/PEAR/Installer.php:1.3 php4/pear/PEAR/Installer.php:1.4 --- php4/pear/PEAR/Installer.php:1.3 Sun Jul 30 10:41:31 2000 +++ php4/pear/PEAR/Installer.php Sun Jan 7 18:45:29 2001 @@ -20,6 +20,8 @@ require_once "PEAR.php"; +register_shutdown_function("__PEAR_Installer_cleanup"); + /** * Administration class used to install PEAR packages and maintain the * class definition cache. @@ -27,8 +29,8 @@ * @since PHP 4.0.2 * @author Stig Bakken <ssb@fast.no> */ -class PEAR_Installer extends PEAR { - +class PEAR_Installer extends PEAR +{ // {{{ properties /** stack of elements, gives some sort of XML context */ @@ -37,6 +39,9 @@ /** name of currently parsed XML element */ var $current_element; + /** array of attributes of the currently parsed XML element */ + var $current_attributes = array(); + /** assoc with information about the package */ var $pkginfo = array(); @@ -96,6 +101,45 @@ // }}} + // {{{ raiseError() + + function raiseError($msg) + { + return new PEAR_Error("$msg\n", 0, PEAR_ERROR_DIE); + } + + // }}} + // {{{ mkDirHier() + + function mkDirHier($dir) + { + $dirstack = array(); + // XXX FIXME this does not work on Windows! + while (!is_dir($dir) && $dir != "/") { + array_unshift($dirstack, $dir); + $dir = dirname($dir); + } + while ($newdir = array_shift($dirstack)) { + if (mkdir($newdir, 0777)) { + $this->log(1, "created dir $newdir"); + } else { + return $this->raiseError("mkdir($newdir) failed"); + } + } + } + + // }}} + // {{{ log() + + function log($level, $msg) + { + if ($this->debug >= $level) { + print "$msg\n"; + } + } + + // }}} + // {{{ cacheLock() function cacheLock() { @@ -166,11 +210,13 @@ // {{{ cacheUpdateFrom() function cacheUpdateFrom($file) { + /* $new = $this->classesDeclaredBy($file); reset($new); while (list($i, $name) = each($new)) { $this->cache['class'][$name] = $file; } + */ } // }}} @@ -185,19 +231,45 @@ * @return bool true if successful, false if not */ function install($pkgfile) { - if (!file_exists($pkgfile)) { - return new PEAR_Installer_Error("No such file: $pkgfile"); - } - + global $_PEAR_Installer_tempfiles; + if (preg_match('#^(http|ftp)://#', $pkgfile)) { + $need_download = true; + } elseif (!file_exists($pkgfile)) { + return $this->raiseError("$pkgfile: no such file"); + } + + if ($need_download) { + $file = basename($pkgfile); + $downloaddir = "/tmp/pearinstall"; + $this->mkDirHier($downloaddir); + $downloadfile = "$downloaddir/$file"; + $fp = @fopen($pkgfile, "r"); + if (!$fp) { + return $this->raiseError("$pkgfile: failed to download ($php_errormsg)"); + } + $wp = @fopen($downloadfile, "w"); + if (!$wp) { + return $this->raiseError("$downloadfile: write failed ($php_errormsg)"); + } + while ($data = @fread($fp, 16384)) { + if (!@fwrite($wp, $data)) { + return $this->raiseError("$downloadfile: write failed ($php_errormsg)"); + } + } + $pkgfile = $downloadfile; + fclose($fp); + fclose($wp); + $_PEAR_Installer_tempfiles[] = $downloadfile; + } $fp = popen("gzip -dc $pkgfile | tar -tf -", "r"); if (!$fp) { - return new PEAR_Installer_Error("Unable to examine $pkgfile (gzip or tar failed)\n"); + return $this->raiseError("Unable to examine $pkgfile (gzip or tar failed)"); } while ($line = fgets($fp, 4096)) { $line = rtrim($line); if (preg_match('!^[^/]+/package.xml$!', $line)) { if ($descfile) { - return new PEAR_Installer_Error("Invalid package: multiple package.xml files at depth one!\n"); + return $this->raiseError("Invalid package: multiple package.xml files at depth one!"); } $descfile = $line; } @@ -205,14 +277,15 @@ pclose($fp); if (!$descfile) { - return new PEAR_Installer_Error("Invalid package: no package.xml file found!\n"); + return $this->raiseError("Invalid package: no package.xml file found!"); } $this->tmpdir = tempnam("/tmp", "pear"); + unlink($this->tmpdir); if (!mkdir($this->tmpdir, 0755)) { - return new PEAR_Installer_Error("Unable to create temporary directory $this->tmpdir.\n"); + return $this->raiseError("Unable to create temporary directory $this->tmpdir."); } - + $_PEAR_Installer_tempfiles[] = $this->tmpdir; $pwd = trim(`pwd`); if (substr($pkgfile, 0, 1) == "/") { @@ -222,13 +295,13 @@ } if (!chdir($this->tmpdir)) { - return new PEAR_Installer_Error("Unable to chdir to $this->tmpdir.\n"); + return $this->raiseError("Unable to chdir to $this->tmpdir."); } system("gzip -dc $pkgfilepath | tar -xf -"); if (!file_exists($descfile)) { - return new PEAR_Installer_Error("Huh? No package.xml file after extracting the archive.\n"); + return $this->raiseError("Huh? No package.xml file after extracting the archive."); } $this->pkgdir = dirname($descfile); @@ -236,11 +309,11 @@ $fp = fopen($descfile, "r"); $xp = xml_parser_create(); if (!$xp) { - return new PEAR_Installer_Error("Unable to create XML parser.\n"); + return $this->raiseError("Unable to create XML parser."); } xml_set_object($xp, &$this); - xml_set_element_handler($xp, "start_handler", "end_handler"); - xml_set_character_data_handler($xp, "char_handler"); + xml_set_element_handler($xp, "startHandler", "endHandler"); + xml_set_character_data_handler($xp, "charHandler"); xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false); $this->element_stack = array(); @@ -250,7 +323,7 @@ while ($data = fread($fp, 2048)) { if (!xml_parse($xp, $data, feof($fp))) { - $err = new PEAR_Installer_Error(sprintf("XML error: %s at line %d", + $err = $this->raiseError(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xp)), xml_get_current_line_number($xp))); xml_parser_free($xp); @@ -264,15 +337,16 @@ } // }}} - // {{{ start_handler() + // {{{ startHandler() - function start_handler($xp, $name, $attribs) { + function startHandler($xp, $name, $attribs) { array_push($this->element_stack, $name); $this->current_element = $name; + $this->current_attributes = $attribs; switch ($name) { case "Package": if (strtolower($attribs["Type"]) != "binary") { - return new PEAR_Installer_Error("Invalid package: only binary packages supported yet.\n"); + return $this->raiseError("Invalid package: only binary packages supported yet."); } $this->pkginfo['pkgtype'] = strtolower($attribs["Type"]); break; @@ -280,123 +354,82 @@ } // }}} - // {{{ end_handler() + // {{{ endHandler() - function end_handler($xp, $name) { + function endHandler($xp, $name) { array_pop($this->element_stack); $this->current_element = $this->element_stack[sizeof($this->element_stack)-1]; } // }}} - // {{{ char_handler() + // {{{ charHandler() - function char_handler($xp, $data) { + function charHandler($xp, $data) { + // XXX FIXME: $data may be incomplete, all of this code should + // actually be in endHandler. + // switch ($this->current_element) { - case "DestDir": - $this->destdir = trim($data); - if (substr($this->destdir, 0, 1) == "/") { - $this->destdir = substr($this->destdir, 1); - } - break; case "Dir": if (!$this->pear_phpdir) { break; } + $type = $this->current_attributes["Type"]; $dir = trim($data); $d = "$this->pear_phpdir/$this->destdir/$dir"; + if (substr($dir, 0, 1) == "/") { + $this->destdir = substr($dir, 1); + } else { + $this->destdir = $dir; + } + break; if (is_file($d)) { - print "Error: wanted to create the directory $d\n"; - print " but it was already a file.\n"; - break; + return $this->raiseError("mkdir $d failed: is a file"); } if (is_dir($d)) { break; } if (!mkdir($d, 0755)) { - print "Error: could not mkdir $d\n"; + return $this->raiseError("mkdir $d failed"); break; } - if ($this->debug) print "[debug] created directory $d\n"; + $this->log(1, "created dir $d"); break; case "File": if (!$this->pear_phpdir) { break; } + $type = strtolower($this->current_attributes["Role"]); $file = trim($data); - $d = "$this->pear_phpdir/$this->destdir"; - if (!copy("$this->pkgdir/$file", "$d/$file")) { - print "Error: failed to copy $this->pkgdir/$file to $d\n"; - break; - } - $this->cacheUpdateFrom("$d/$file"); - if ($this->debug) print "[debug] installed $d/$file\n"; + $updatecache = false; + switch ($type) { + case "test": + $d = ""; // don't install test files for now + break; + default: + if ($this->destdir) { + $d = "$this->pear_phpdir/$this->destdir"; + } else { + $d = $this->pear_phpdir; + } + $updatecache = true; + break; + } + if (!$d) { + break; + } + if (!is_dir($d)) { + $this->mkDirHier($d); + } + $bfile = basename($file); + if (!copy("$this->pkgdir/$file", "$d/$bfile")) { + $this->log(0, "failed to copy $this->pkgdir/$file to $d"); + break; + } + if ($updatecache) { + $this->cacheUpdateFrom("$d/$file"); + } + $this->log(1, "installed $d/$bfile"); break; - case "ExtDir": - if (!$this->pear_extdir) { - break; - } - $dir = trim($data); - $d = "$this->pear_extdir/$this->destdir/$dir"; - if (is_file($d)) { - print "Error: wanted to create the directory $d\n"; - print " but it was already a file.\n"; - break; - } - if (is_dir($d)) { - continue 2; - } - if (!mkdir($d, 0755)) { - print "Error: could not mkdir $d\n"; - break; - } - if ($this->debug) print "[debug] created directory $d\n"; - break; - case "ExtFile": - if (!$this->pear_extdir) { - break; - } - $file = trim($data); - $d = "$this->pear_extdir/$this->destdir"; - if (!copy("$this->pkgdir/$file", "$d/$file")) { - print "Error: failed to copy $this->pkgdir/$file to $d\n"; - break; - } - if ($this->debug) print "[debug] installed $d/$file\n"; - break; - case "DocDir": - if (!$this->pear_docdir) { - break; - } - $dir = trim($data); - $d = "$this->pear_docdir/$this->destdir/$dir"; - if (is_file($d)) { - print "Error: wanted to create the directory $d\n"; - print " but it was already a file.\n"; - break; - } - if (is_dir($d)) { - break; - } - if (!mkdir($d, 0755)) { - print "Error: could not mkdir $d\n"; - break; - } - if ($this->debug) print "[debug] created directory $d\n"; - break; - case "DocFile": - if (!$this->pear_docdir) { - break; - } - $file = trim($data); - $d = "$this->pear_docdir/$this->destdir"; - if (!copy("$this->pkgdir/$file", "$d/$file")) { - print "Error: failed to copy $this->pkgdir/$file to $d\n"; - break; - } - if ($this->debug) { - print "[debug] installed $d/$file\n"; - } - break; } } @@ -413,7 +446,9 @@ */ function classesDeclaredBy($file) { $before = get_declared_classes(); + ob_start(); include($file); + ob_end_clean(); $after = get_declared_classes(); // using array_slice to renumber array $diff = array_slice(array_diff($after, $before), 0); @@ -451,14 +486,18 @@ // }}} } -class PEAR_Installer_Error extends PEAR_Error { - // {{{ constructor - - function PEAR_Installer_Error($msg) { - $this->PEAR_Error($msg, 0, PEAR_ERROR_DIE); +function __PEAR_Installer_cleanup() +{ + global $_PEAR_Installer_tempfiles; + if (is_array($_PEAR_Installer_tempfiles)) { + while ($file = array_shift($_PEAR_Installer_tempfiles)) { + if (is_dir($file)) { + system("rm -rf $file"); // XXX FIXME Windows + } else { + unlink($file); + } + } } - - // }}} } ?> Index: php4/pear/PEAR/tests/DB-1.0.phkg +++ php4/pear/PEAR/tests/DB-1.0.phkg í&Y: ì<kSDzùj~ÅDå27ØNDp,@¶© $'×vT+ííñjWÙÿ÷ÛÝóØÙȺç\o%vzzzú==3{°×è4Ûo¾äÓno·>}?Ûí§O¶S?åóMûi·û¤ÛÝÚêÂïv»³õ{üE©OFVÀØ7a8½î®öÿÐç@Èÿ`¯¹Z¬¾Ð(Ï'¹'òÝòï<î<Þz²ýà;ín÷ÖþBô¤ÿçòÿáGûF«ÿ±GÏò<B\7ìôÕ)»äAèøÛn¶Ù_zn>?]ûþê:p.«Îj¬óý÷Oëøïwôï÷uÖdgNxøñê¡ëlá,ôã`ÆÙÜq9Ã?ãé¿ù,b¯YÙm¶»Ì³HRè:3î ¼nÐuVý§±g»ÜfWN´ðfeÍÞYÜ#4ÐÑáþ`8ÔåÙØ¥pYãZSÑr± ¾W~àÚ+Çæ+>ÅÖ;äxÃQ´êµZWWWènZþVwÒî6£÷Qs=¸asvíÇÌvlæùø;@$8D³³Îbf<Õ¸üidGÛ&Xg+['äHÒtÉáË HÙg3ËcK`$Ñ,itKn;VÄÝë쬿~õãháa#çíYïÞqý níùÜ £¦ç?»ózåùÜsDt÷íÁ¬~É:Íí.Ùs«ÓmuÚ¬Ýému{'fÍïWì¾ìv`EÖeëx6_|¹±?b¼skÆ»ð?b'àß3ú#«²³±Ñz¸ÁãXrà´â^Àö}ì[³Ð6±§Ñõ Þ,A0¡]t<øÔcOP¨d¾Ç¥J@£¡¤X6h£gt`?XZï@WcPxrA Eü}[.¢PNPî{½a:æa~¢ZÃÑ`Þ6;¯Vþ*õR¡¶k;&ì`4:7:°ñoóþ¿²]Ý"ØýáølÔ?ð"ØáÉÙäÅÉù𠺱]Û?ú¿Mÿ:UÆã"Øóáøüôôdt6017Áûgû¯Ò³k<-=þÒ?:<È0¢ñ]ÙÜöû§ý½£IÃ÷E°g£óá~?M-¢HnÉðüxo ÄØèÊMÁ nºÑ)ÛÁá/ÿ3dØÐ)ÛÁÞxp4Ø7Int å¶ß+@z N¡Ü$ì 6aå¦`G'§ ÍN¡Ü'ãóýWgiY4:%rCØ£¶PnÃÁà`r|2 ûJÝB¹!±G'û?¥U²[(7Úù ,é|x69NF'¿BFå&]Ú¯Và9ÞEHÁCÍ#HJ °Báv Ѹ&×áäñªµº¶ÐÌÁúå~_±Pà`Wð<H¤àÀßFà©®ÄȾ 1¤§È5ýÚ/Ó&«$Ø&}ôN5ÓC8ù,¼HÌ=1Z@Ø#?@ÂoîKáÀ©GlðÀÚºFäáCVCǬ¢"A**NÛQ¡¦;Æ Øâïù,dc ÎÝàȧ¥Fî5úÀ¸+ løK,fqLh«c'K4¢áÇ -¬ ØÌ_r˲pf¹°1- MIH@¹( °`bf¸ ¤¬,1$øë«ä-幯å£4ÔÎ8eö(m Là©|»d ¼çsȽ æâ(BfÇ+×·ld Sl Xîc4!ü:íúÇñ~ÿ¨./c4¢õä´ÿó9Úw·\cD'ÈOçsà äWÖu6àQ,ôzêxH!A¢"¯. '´]~7å kÈ\)мw8<>9 íãñÙ«Ñ9e°!u#ÆÚÐÌPtòëSãÆyXHë óh¶0WÜlfÎÎGCær`&!bæR!ؤ!Ù>ÓÎ$l¨¯¸ëÖA LÖ6ÀiH_ÐE>âXð÷LXc4¿·0Ã"Ã̵ÒénU ]ø8ó` [îÖV%¯Y®åu!=Mr:Ýb9)Ù#UÝÞÏËÕê#´VnÖs eP¼ÍHÏáf,ï)rf1ï¬9P]ê¸ò éð¹»Ði!'N,?áHMÜÁþùÛ6¨Ý÷Ýx©´ Rä÷Àzðû^¼B ² lPt©m ñêQNF ¨ÎÝ£ÌÄktá-8AV'û]Æ K`Ó°¥0àtÀCxË!uÆu¯åz8#PØK°60U+ÀhÉu{4 ~ H&pà¯Ô=!ùÅÑáééà åÀ¬BaðÄL-»È2¸SBWøÛ/é&n&5±¬ ÎM×®³_Î2-tÚ4T%1Æò,îXDwʼ8®¹=½!F¹V¦°ý ÑFU½Fng8D Qdô©0*Ï?©g ÍcoiI ·Ä +0 E[¥@ ëT#ÚÒÓS+¹ÚuÁ³ªCëR¹\¤8ëxp3^ëio$?ð&ÙdÚëh>( Q¤+ÁÊLÉcL¬È±pù*R!"i0²£-ÖÉËEuf5³<üKWÏÒý!Tá"ÝØËNN ð.|vé¸FV3áX9hSõ \fXX:ýyÈÉrì ßà?0ùåuø+§øp|=þù¦}(4"LXÖÌÉâWæë¹Bl½¦Û>áô'Ø ª¨ñæ0H¤T$jRyEÐæTEС`6¥'¯B%¥â>WÕÖ¥?-*XTiÁÀ ±àÁZßv³-\°è½ØF0¨°X'ôøU¢´4Yò*´ê¬ab.{+$Ï)}e÷©#³|:© +Y$2E`dQ0¾¦C+´ÂßFÇ÷z)ÿãO¥Gìm(Qã{Ïgnl2:×ÖýðYèBïÝ'bDa»è@'ÖóÝF ^?G&ØÍ³ê·Ø\Ãqp89IÁíXæ«20æ½Ð_B#¢öãÆÄ°§4W&°yYÑÁ£:·+xÈ2<N ÂLÈE¶B~0*r7' »Î*%5J¾BOf¥`û`T*B-2 íª³èX\e+%³Y¡ ®9¦¾ïêE6%é& ¡BtDOr² ejÍÞaá;YÚ>xW¬ñjåQé'rÄ~~åרQ`ÂjelCRWEñ×SlÛesSb/¨ÕN8!áxM«7þ e è¿¢3}ÚMRú{ÂìjÐ×°B|Wy»s»!®aÉ_ÐVïólÀÐxf2'bhMg°{-;4¾\ß0NÖ?=TíesheIq±X+çVÕê ±uËÈ:ø¯K[r©!4G¤ÎªúêâW9_ZnÌtQÉSö®zæFÈLQà³³½¨ÚÙBdUXjNH£tÓ.¨¨=Ð`vs# GO tâÏ%tÝ ÕÖä¥ÜÁ<õÒò¬{i"¢9X*ãW ¢øÈ¬yD54ó¬ÙC¶°§.fýER1FYÿw[&c¬ J L>hG«_L 6ÌÕÍÖïoÂÕÃáx0:»9?Åü(kß§GýýAíMø¨ålÖ%EdtÌx$ñQóÝðq#ÓL.ñs©¼ªí*Y$UfQ0½duYUý ù5/8¬Ú(NPH¬+$FÑYVoµ)ò%ôêÍJÍ¢LªTý7,K§mK¹u)àrû.ToÊ0»û2±IEß;ÝT9¨¸4¦ÔHçIÅTÆaÄû+\Q r¯ß¿ð?±þUÄøÔf÷ôX]F4\hôÔ{p"îoÜ»§b!+xv±Jì½óü+I@¥nôÈì)ê }iDÊ0Ý%µÛ'È*væï"`qÑÉ©9Ý%ðWz×55w*]*À¥ã'î(·ý²L³KÂ0Øò<ðÓä¾b¶ãX»ö ó°è9jYä,yqG±Ñë(òtµ¡kéäÓÀæ&¦ìùÉ¢1Ñà¦Z¶£Þ!déa<[0X8¸ =hÿ±¨Gg_²=ôî±Ùl^åü¤mÖª¸+¥i&ûõc/GÚÌA»>'r6^{õ¾ÈÄø,~¹DÉßü¤ÂÍ`,5°nªºüÄÉãUr±X¹ å¡Ó}I³º Ú©G¥ñ\f-\^âÐÄvå/¬Û<e§|Þkø¶,hâ*Fe5ÆbùåµôùxÒE!®i"\3ZÙ%áB¬qqþÌdÄKy°Ë")ð_½&¹ê%}jÓ.äX<ªR=1Í5Õß 3Í`R1+°éÎøç#¦ôúëá?òg¾Ûcûþr{ÎL¤ê=v|¬ÍV¶zÎûôðbÃÏzìü¦jI[ù¯{¨âo¢%©Ñr_-ÇàwK½ö¡M&ÄÕcç¸ÝD«NL\ÿÂÑkîÈáÊìèø-£Ó¤!kh.Ö;`,wû±\9]T[f¥§ÄWUb¨õZ-M©¢æ¹âæ#Å®VIÕçxiªÔBÆh¡úp»óGú¡å:ÏÖÂñºõXõn6/Óåý£ñ %¬ËWþ«ÐtedÊò\²êB=6îÝ®ÄÈÚ𽮨#¥4³.[Ô4+¹%æ|b\¾E±<ߢäX0lÒ²qOWL^åæ÷êëß{o¡þßTêL®,³r_/Ü¥÷¯YaI´Þe0à+×ñ*RbÜÜXk²ø·ÕbDfc¢2Rú¦ ¤¾©Vðoí¾ x*ã ÍJ`FÑKÑÞAÊv-(ÐUSKJn%èĸ :Yã¦Juqi¹üCs$;L[ 7öeÅQóaÓjÁ¬Z?δI¬4>O²Ô8=ÑõÆ*?ÃÏç?"Aw¡Í+ÍÚ6´ÛIÝ2I%®RùüïgÜý½yZ÷h½ñµ'ûËã[ ïT<ëY*7GDX¥¢]JnV»T$1\cªÊä-&)ÚZ Ô2eI9)$¦È^>n|Ô TM<ÙÅØjÄæ&¡ønèõ|U½#Ùöû·ír¶ô~¦$va çÄèâU~£Syeõ0ª²rXªÖCUºS²ªÙ4³hâ¨;ë¯"áe ±¯¨hÇLRõgT¨è#tY+P?'_¾r>/hÇŲm'§}è%û´¶ÄÁàjT\нµ&LëÅëìÞ«ÞAÜÝejÙY³Ù5g#á*P`Á.LÎÇZ<îêæüvYs6Uö?;g ŸQÄè·Ãí¤Ü±©µºøER\TTÔò;^·FèÄÑ¥lPVUÿÒQFÙûoÚ¡"bMKTàÿ=¶¸»ûfº£¬¶Üa÷>Ù¸YdÅ"Éû)aw©¬²½ÞMÒ2y¾Î´É«ÀZp/Gm"ÈGt*©O;ÍÙSBú4ëbiÈ<ý¢3°s<Iiê HrÚ] g?ÍÜ{¤KÛ¾´\S,v¿DûN®T¦»¾²Z¶-ðUr%àtn|Æó°aòCÔÓ»\ùlõSWtèê4ì²bfê¥e7¢v¢/ðT8íÀ©²8¡J¶ËYÈVYÀci0cèöjAùWÕûôÛRtîs*>Ð%à:5é÷âôJ³Dɺ²t;NrÑ丶[ø¸GDʬ+ Ry|¥}·¼AýrÀOnÛ®å@h`ª³ÿ³¬'"³¼Ï\*\ÁÿÕÙí¹<a4)7Bæ IAæ8S1§¡×¾ï¹'æDLjwN*¡ïvüõÙ`ïu§L ɧxFºÞ^Ë3ùÒÿ TÄѱ qÙÉýÅ¡Y¨SO¦ÒÀH8Ø,ñ úpè)çså{¹~|¶ñw¿ÿ ¿ÿñ?ó ßé>y¼ßÙêt¾~ÿåxùËÓâ_à30·ÿåñöã§OÅ÷_¶w·: ßÝênýþË?ñ|ýþË×ï¿|ýþË×ï¿ü|ÿeóײÄW\Z¢¼VF9§wu²A&ªûw¢8wû°ÕÌTĪ*Øb>|ÀJÅÃä0çdy<ÜüP:ðB«<} wÄ GÜB.Êi1¥,ÕNþZá²ø33X}ðx ¡]ÓDdø©=ºß9ßåÌP_ùùIä¦ ;§èýÒzFËh'3IY.XX®ËAá8<d4`r" G»lssÇMÉRW^n5@ý8V¢O (îmbËÒùoâFÿ&( úfYz«MQÀ¦»Fm ôÇMü1a¡^½øW0²bißGu26èLs±JUå¶Ù®¸zBKù5u§ä©Ôõ)³zWܧVImó1µJîek+ìµâöÛÊ[{Ø%½¤ÌqÒ¨ÓåëhÂsËYI«²`-{§$e·À§p¥ø#ðÖcñü3¶ÒwÄvÄ('¢5 øfÍ!"%Ü}xÏæ.èoB|W¤l7ø8áx«8Ò7)|AcIÉ!ußÂG+ÞT8ÍéÊ!K*ÐìQoâþôüWuº+y«¸§ùkº¸o ùt <£b¹ ß7Ò¦2ÎÊfqHOÝïªÉEÑlV+áuþ`xM¶DA îöÂ2× üíàêj8*ka²!®ø[HÙ²ÂQ¸Ã°Nf7Tt:Ò*42¾Z ¶t¨°¥º{bÙ©9 Wr´@_ɬJ³AUó"~Á2cíËJXßhÇ÷æJ!´Å§õ?Iãù:P·¨ '(%êÓ`IÑ §"ïùÚèó¶äNÓý £E«áM\M«]ÂlÀlVä.Î å1JÅðï È/0UDi ÝwJĵn»¸¹ ¦z¬c*ú;~ Ö½Wûú"ÚXN¾!>vàê-c&Þæ+ü`¡ @ƨÔÿÖëEù0ó0ÛïÙE·æBuµ¾]&bòôýmZ©ï BKüXn¾Å 'p¼½+¼rù µ|¡Aé+t¾ªp(8u'N_öÌ0>÷i c°ò*â jrE\eeOjK\u6¼]æfµiâßÒ¹$/½¬JªOØïíõ÷Êb·Á&¡Lht/;±ocÈ Íã;ùíufæ]?}Ý~K²c¿î¼åîgRH¯aèßÔܤÉëD/KÉLNdÅiê YuËÔåÅR Ý5ýëÔ÷5OXZqÈ#BôÊòl·8ã'ÑþºáºÐªR0y ùn×¢r^GU'~Ô{ùÈoÇæ¶¯NGóz¦gþ|OªÏÁáé}¿>ÊèÊèUe:ëA£¾>{îÿ¶÷îkmäÌÞèþ×\E¾Øðà I83|Ã!ÈVå§Ámè7Æíq0¼ëÛ7´¯c«ª$µ¤VÆdîg&@·T:J¥ª_åo[h©R¾*pÔ:f㹺TA)ôþî%ù,!À YËÎF~ÃVÿ)|ÂØfÄß`%xý¶ÚÕS*h¶«;'gÑ.['l) 8(¿æèÌ(]¯´óOÉäW,ZÃ=àNnƪÈrhvlúË zmXs@ ¨g<[°éøalhõZó*±~Z É(Ç&odn¦¬¥¤¯¸¬>6sÆg¶¼>I°µÇ`ejʺßAM>{GXÃ7SÓ`óÓðNHOĺBO OL"EÄ{Á¡O¨;l`¬¢úX7ÜT¢Z±7gcÏý¤¨Éà1ûJÌ{u7]¢ì¨ÿüÇÚ0E6IéH¾KMDâ,Bø$&ÅÚ)ùNjO§+ù1yyTùx=rç'^z⥤ úmõ±Ísö©êeVõ¦¤I@hÈv`WÔ ôssé;Ú»ádÔñIAÈ¥-Å÷$#GVÍ*YK&ô¨ ò°iRãD²î0ôÏ oÙ,ݰst\áÒ´ìÒºØj +ü¼%D#¢XÁ%í Q Û6`«¸ Ç«È4?ÅÌ/cÂ8ñurÜs^`åkÓLí#d#±èg4uGÇ%sEª`j<ßÇgKH'=úõÔDG¿¤àùXúE}Á0ËYÄ>¹0ûäþ}¡×ÞL>öòJg{K_BiÞàà I@îPùo®{µÒ¿ÂFlµg \à1ÿ 0¤¢s`\OÕ³ÃG-Ò},;áhàOªå÷|xù±,Ñ¡IYÊúnmÕ+ù ÚZ]ô1½Ã~>£ÂÀÀ˧OÍñ,½_ôcª\x_ã«<ªÔ{ªïÓ§I¥"¹Ç9 <nöä 0|î¬qÁª]¿ÿùê]:<lbTéÕqYáçw2©djç'ä3ü²>¶¨>ei¡Å$7u¬üý"\õvÔÎ%@\Ëòwh-ü|Ôh©Í\(/"<¶#¨ÂíyüQ#+ö£NQôê.]d2uýÓX1"¼4rïM¶>ó( «"Nò[¨×¡C8÷_ úXNtÿjƦ@í~` ?ô] \fÆTîÃ85F´.,[ @¥«2°f¤åÆ&OÖßi»±àÇØqè»è4U6qNJ˾* j>ðD]óçÈVúñOèmQÛ?ÿ¬9KNóY(ô(aÜØñ²½p±vWþÂ%%nÆ'¦õÁ×wè'=²NFwièÏ?Ù ÕÒþøFÈjjßý»MíbßÃvÈÝeÔÆ¶CH)ØIä>c?ÁÞ)¡v[O©R" Ø«Å_Øåò³øWr%5!Luñìº5 h,H_wV?®³'F¥Ël(û®?´ëo»gñ=ñDÆ´ã SÈÒ=£¡Ìj¸B©(6[aÍVÞ2$yBöOÐhäòÉ\Nº "SÞgoxB AÝL(À¯Â®, ÔÄoX¾épSÏHS-Â{¯¯¼±®^SØ:DHÆ7C®à3tQåÙêÌ·×Bbçç×cFã@3EsêñnܨÆöÙBàòÞ:»8c~ìDz}gìÓ²LoÒ4ïs{îð¤YóþM8, .éiâ ô)hÙ¬+NÏ¥q#±rN¥WAÏïß&I]Æí½PqÓ{®éÂé eÁµÔz±õ³ãì¡y?GéaÀG$b¼GEyºù² sé~öxX)ª§<ö?»qK=R°q7ë7ßL$×àÆ É¸ULå{½Zþ±Úüìh± ËÃ9þL²áW£Xi>ÌÃ[)ÎìòZ+òëN¸'Ê*¥d`¢´ÄÇ7¤hHæyXZÓÉÕOìCÊÞf &¯ûX<ù3aÒOU_É ôWCÛC~ÚQl&I\â;Õ[ `Dé¬ãº<0éãd/аÆqBitBÃ)Èà M0÷$=xüÏqQÜøÂP Æz,¡@e¸c×Ììåþ#o©ÃÔå3QâÝO¯ËJåM(¶F'c 'Ѽ5Ôe,¸,oê¶Â¾'m+XvÒÞv)ÛWËá:ÔegÑdîÖ½QÕMÁÞÒösÀÒ'ýJ©Ap\à&¡Þå\@;}:)¾ØÐB£|~ª·¢ $Ë`';ÂÐCÙ$[XÙ [ÜMجÒk(\n#h6lq^Ð'¼S%_È¢H0XÌÅOòáVhd-ð+-cmÞoAËÆÄ¸4T³«GáJ¢2i\i'$r%×¥,ÉÙP¦¡ÊÈþV· !wJM 1S£s Ø ðÊ0q\öwïµXÒ\û 0gâ4>*ðiïc.©»I®µ62C6.ä"K§86#3¶iùä{Ð7[Úõ¾&£rýömPs^ÚÍN6-öÚ¥ÕÄzËÊ5yMáÉÕ èM<Ö»Ls$&xit]8iæ§Û¶Ác:Uróì©|¢ó*rX2âÃkçIøÉ#íãsôÑN,\6;Q qµQ@äH®d¼¿\ ~0+PDõ¢¢-J(ÁRÕ`ÇÄ2zKÒVã# F¸èóPôñ S°f{¬!JÖ¬9¯bs.µå£TkCµv49òÎÁùè¶¼erëRÆÑ*û¢{Èr% ìÃhK¢d"æ©r3{"hÌU}cÓ¦<×׬ÀrÇ3# f³õöö½ôD¥¾Tdã]é§Ô==~w¸³_¨`åÒÙ;o¢x¬uáFÎå«[ #k@!v~Q ÈøO!é4yæ þúõÇÕÕõW?ÈD-5>1Q[&ºd¯bK$Òu×±U("ã÷êàòç¼9>:pxWTjbùG148ï©ð&A@k4ÿJ>@ômþk}2 °ååeÚè2ë]ǰN¼òðûtu§Ô§"»°R³µ'ÆV¥$nk©¥ZòÄfÿây#¸ºòÑR+ Êæáj®CtÆTÛûÁmXÅ©Áu.ÓrÚ=YÆ Î·Ïiò'AtòV¸AäðWH£óF·TÊhÙ>wZÓNHö î/¦M~Á8\(sɬ ʴݦ·ä÷ß^QÎB®ô´ÔÒ~`j ¦Õ;=ßåª]dás\ªfM ¨(ÀÂ1·8¥çE'`<Xú9¾¢M]L;î +À¾GÑ{®Oý(ƪִî4kæR¿Ùæ}4Z\±WÀ®ÎÙ¯¶và¯ÍUl-Õ8Ç9d¢©a;#+½¦6úàKÓá!½p"Äû$0XË2Ûb#3[¬¸MÙCrqqMçÝÙüÅLO¬~7¶bç¢m;êüBgäA4¯Dc0ÉÉXâï G¦IWy¤÷ѪÍù§ñC÷z@E3)W>-à ßß²ç°"¢f¹Û«"_?`Ñã\c +°øÙ[/]Âxë1¤n¿ïÖ°¸å¢®)îç }{Èñ`gá½^|8èõbèýÙ ëðö¼+ÐNn¡îîaש>ñØ61<÷ñYÖòAë!k¤}|Àú̾ýÞOÿxÿÿÝZ_m þ7 /·7ZkÿÝ\oøßóx üïÿ»Àÿ.ð¿¿üoé¬+Fl àz4¨áî»lu¡¹»O¡]1ÌJèÜü×>h*éfqà]0ÊÜéN~ÚD~¡F¸¯*(rÁ(ØCñÍ.üUÛñS©cÂ&í¾©¬Eç g)-NÄEÂiÀÆ#ägÑKê «Yý¨9ÐÅqdïØ=Ô²8Z21± Ú¬ :GQϼ5¸§aîò3%LDZ¶|!@ËXâØ3e^t,8²ü·êüëdìCnæ<Jx*°4Q`Ø*dÒéÎö! ¨ÇíÓN]&ZËh=O¢-Ñö>û¼ûG·óûÞÉéIê©Ý㣷2ɪ^ÚáÑîkºþëìêºÁfc§Ìµ¦AðäÝÎϧ ¦GIV-IÞìuöweõV²ÖuB'nÿ.¾²æÅv÷v~éÈRm½ñ¿nï¿ëtwÞv»ÇG¿É±nR[ÃÀ¹gÑ1ïРÕücÁ} nF·°&Il Q¢¥mt*<Q0ðòîÉ!òezݤ2A1LÆØ+¾ÚS@·å$øÃnD$ÎcYm¼lÈÆÔ QGóXÝJKïvËW8C%/ûãg>á1ßø»QµOE(íDç(<áþãÈ?Ù±0e±Ónícl Åñ¤Þôv¶®áû¥ýõ¦S nx <fF# ¤G7ÚÇ(¼;²EÞÛ]Ùý[Z¿äÌ»ñÞMñJ¼yÆ»J4|αNðËè&È ôÍ2EÎ:å«c.9b6ÒSÓ´ËOÅ¿g±çÄ|áï¿ê»LÑ¡bÐ,áäqrÒ@Þ *Ý;³æ¨S]im¦ª1D¬O,Îè®(î^÷Ï&3Ò}Æ.k2FB¢hÓÞ¿ÿôø]GcNÀNG2<ƲÆ"ZyÎ8u¾"AèYBrdtzUí 2¸j7©º¯%O!"> :>ù°ÿ$m=©æyºÂq7i×!ø0Y°`Ã-:¿=pHJt¸Soo"6ÀýJÉÁÓètv#º6û9»ä« »Qýi1¸cqÊ,½@i¨Þ¢uÇ6_øÞ#ü?\i«+÷8àµá?ô¸OðFGä´f&Åìz WQVQdßÝÜ¡?>°/ù(nÚC"ǼLv·ÀûAÅí8L÷à®Í¿h©£«K@Ö%¬@/rw»¯Èì5KPª;ïö÷Ù?2O¡ÀöÆÓ>áh7¾F¨å9Ä&ÖÃÇHÆhèÑ£«kZ=GH}¢)°Qæ¹âu<û8ê¾nä Ç0Yñ/+WödÊ£í¶0ÏÄvg)s¢bù]¢ÈÎÙËÈ2Áh6¦ =åêhÛUk»&ì¥qöê^@P;PêN Ù<{!:,Íb}Þõc .çæcD¿×js1xóW[<{lµÅÆ~Qm*aV1ܰ¬¶1.%ÜÜíB\:ð®¹ÛR#'¶ g)'Ê È&áÃ&,Ý*F±qÇvÑò»)æð ÄI ËJE £ôc¤ÕSÛõ0gIé,J¦G!wÒ'PÂÞ=ñPôܱ#3ý4ìyjÎh¯5B¶-íìsBµ¯V'0æg©º¬^¨·àr*q8Ú<!ëtÖ:©ã¶¤_Ð`úd@ÙÑ"Ùr^E#1VGçÜN(5Û×¥^æàv×ìL7Q>^¡D6- ÌààÐQA&ñFBåét¢Á¨ãn#6øc'½p¼LyJ5ÐGùáË<²Æm£¨ Ï:AuCdóJäêÆTÅ$ÆB̶Í0â{^W}c§P5j!BÄj à×ã1l)èøyW"¯ïX6kà4ÃØM×#%>©ý§·Ùº<ØÈÃ9WÈM¸ ZÛÙòTª"ÛÜ7Hã.¦¢?Øzt¸Ü´& EfFi±'¯9kME|K2UHîÈâÏâ9«´ÌúµQÞÄp1ü´¬LÔ¸ÁX++ïÿÇ]úwcéÇîÇæºzÔg:óµ]_½ qýJ(KPM÷O:ǧÎÞáé³ø¿¬"wY^®TAÄ® ¦¸%È&=yâXÌ,nAüÛÒnXüÄ»¦Kðiáíl>K"5/Ñ27 -É$= M<ù-Ñãã¦çÿ;7À´9ärÅt]¿ÂJ¥~4#³Öû]áÓ.âTêü.ÛnGO¹ê÷`Mt ¢Ú»Ã½;»Îö»Ó£îÞ!£yÐ9<uNñZÏ"æ¼=Þ;Ø>þÃù¥ó#\«eTMît&"ĺ2³- Ð4hKàc·Ç#´Þâ)YÞíìwØ@hîÙyCð2ªi÷3I 1"£?@ÔÁóOÎ ¤N°]¨¢ºBlL rª.%÷KJ[p<®ÜÉù%ÿù~Oµû> ú±Õ'Okìý"Т]¸Ã7Ƨ¤D+ÕÚmÎo?w;Ns«Õ*ÙuÆFyÀIc's®Xµ9?ئOëÜ¢U,pJÕjVôüÔ¹VʺÄï§G»G+7~x9`ÂÖ¦xK7[¨íÕ_11P¼POâÝ ^{noÀC,²WgþÔ _þc=ýÐ;;óÿûÿ&ûu=²ÿo6Yú&¸öÿsx ûÿÂþ¿°ÿ/ìÿ¿yûÿ£Ý×;aþÛ꽬ÿ+õEµþGÚSÿbÿ¥D³ÿ¤¯j±_Rmì¡2ùLìM{v¢Ìåbb_a¢è-õ£ÅƾTªð{«b<oykתE}E1¨/©õK²¨/Ê Ò¬5k S§L´ÑSìlîüL ZÍìÔl«jë x̧îá»×Ò\$ûÁllö)QÓ(lwï×ÿîñïm¶-êßwON·1n<&Y%áåÐ÷vÖ÷Øwi1Ï>¯¶R?ïÄúûÝáÉ»·oå4biÀêþÍÑ»C%E++EÓ ³þçÉ2 µòjebsñÇ~eßLë÷æÙ±ó2_yJ /ÝÃmåÅü÷tPIÜÅ[ ä* ë×¢ÛJ³èÎKSø õG3 ãSqW Å`Eûnõ ¬4W çмÀ©L¬zGÔÅË ódP=/CrVÂ`à÷*ð"u3HÚ7Û ñvô&Ý¢taZ²}Iº*Tè;ÇÄe¿ÉÄÚkì¸_DE8@T4¿õõ¦YXÌ1¢"#¨/Ïð ¯Z̹à3oÃjÔ/rreúOà®Ý:t¿/bÓÑBÑCÔ0ÅçÓÆã"Ëå"?I;µ¼DjÖ^QÜ-¢û[ÜcZÝ0öØÓ«$¸îÏÏ+¢êpPÅ ,-ÉáÀÒLÑ),{Z]g¹]npHõBÀÒ ¡dx »hͶޢdçÒ}<ðë¨Õج½ ä?âPÓ àÊâ³@QÈâþwY%÷t-xHß4õ£WÁ<ü ²\ªßszÜC<*:ÕCIAþDho !ïÔèÅÁÀN.ÙëàNøÃ¤ý!®%2Xön"[$ß"Ã;,¤Xª¹©Ð^AQykS!÷<¸ øUkèIì_ÖpÌý&x_¬µÿÔEŬî{;}`FsýÛÚh7Öä©G@ù¡uò4k²Õb9Ïl©YV«rP£ÚD`×ò¸\)×rþÉ5̳ìwÕÖ£ØV3^uæGƼ¶_²cV7«ð"õnõ^¾(OH+6ñ J2¬à§Â À åú"? ñúî!uÑn¢ùjF¶fFeóSÒtÕׯæäá 6ÉÉäS{väñë®RiSR{©Óc_~amQJ11>gZøa7äÜ»L침V¤Aï¦Sýð~ùûkÕåïÐÐ審.ÃS«ÄhEãEäçXßÝÛ° ¸2r ö¿A¿ýÿ×PO¡ ,ÿJ,YàW°.aîò9ÃÍcwH`WËMgþ>_:sCÿ|ñÆvùË\8=¨yJdÿnllÀ$Ëþc£ÝûæêÚúz³ø« ýÇ\Âþ£°ÿ(ì? û¯ÅþãuïcÐËh(AÚ/óͼVtC6ú°È(!nÅ8FúΡcºA©PíqÜóó`J)PòÙàn£j/ÁëÙíy ¢*ÄApÆE%Õ±R·ÍÐoíIé.ÇIHÂÎÊÜçD6ØCÊÙ¿@4ðéÄ¡*zé6$¸`- ¹¸à*$¦¿sZد|ÿ}ÌOüªÁØùì{72ü°(åðÃmqF[äÍo@{9è)ü1]*I+ÔGCËY(¥±ëFcÿÊßBÈÆP'ÉÞð&YvV®[.]`Ú4XâE¹Ô©öÎ.cô@¡ êÓ(jtb( Q81T`p0 X¡P æ¡¥3!@3?ÌF¸øJ.cágãLç¬.XÍBÛ.½[ò3@ q£BÝZÅþÀ½à±Õ¼s¸üiÄaB´*q>Àk²¼PR ÓfÕðÇ4*!¼>EüñB7üÏE¡Öu¹ þ{no ï ôÀ{ )¯MÅÎNdÅöðUz>ìNÐCÑÒ"X ±jGkWÞ+-+ó¥]v®<¶ô0 ÞR ;mxyÍô¡S`çYak UQÙ!ú±±R¨ñyvì&5ò³Eä\ö+å ÷â |ʤl ÒQ²j\«1 ¨ÅJZßÐ~åe|N75gƲ6ÐêÑøÿö(¦|¾%%r3Ô÷/б«-£¤ «ïgw "Ôʸ¯p)ÐB5µ~víÑêìSía×£*/³¦ m` eþ:Ø?¡f[N)ÇÇQ¤¨eGénðþR4ТÀeHÉGUç$ò ÇMù=y1Êh"!ùD`´¸{Q<E4# ÕÕ³,Ó¬¡4ȵ4E³÷Jh$ËåBIQo4U°!®½HDqä]°²OP$#î ¬ØWR4$¶Î|à@$D["Ýð{¥øôÞ!h Wõ®FÛëà¦]ÚÆíÊÖù^O"Ñê"#î÷4,uâáWuÞaÚ2½·Í:ú1éjÎ9§z4§Í¸jêdã_Ê5á UÝeâ0a´`©)Iêèz2\Ln^ {ÅùØâ³OÛqS-l ô)4ì#; Ľb´p¹oÒÅýQaáômyz;r«¬¾ÕúXK^wd×Ú³h¼^ÉÆ3ð9FMª*îÌ5&N¨qñÉ'ËyQL,ù²&Êíb+Y)ÕHw¤¶$ÑgáYçý p{p·ÏRl!«à5³T u>`tТÄ÷z"¿$iþí^_¯ ³¶Pκ@ª^Êáäl¶@Tªzâ÷yØOE7XiJ¯³ÃÛ@˸È3õõåäj &EPÁ5-YùùëãÔGöN9¸ÿ\{BzàÀkK]aL6àkvXÖ ñ¸°¢*FDnía#u d2>&Ú ¼çUåa^ÑI3 8û>¡6JßmdæSÞÊ*XMà$ƪ¥åà;HÐ5ÃØSå½rÈÖ¶Õ!73àûjj×3ÚZåÀR$}¶C2Q]òÀ®äC"´×·ì¨ìÌ "êmt,¦]ì¦ÄÙLBvÒ@ wÈDhì-ER+;õùcöfhó+,Â)t¨]Og!&1 1¨nÜ!®{6ñEfnM¼Â£g:WN^·ûÛöñáÞáO]°ñïîÿÁÕ@dGM÷3¡S=óÎ]V!¥oØÉJÐÊÙóÆ¥þ~púÊ«`xÁAÉâÎn 5bfHfº-»è&¶ðmÀ ¥¿aF5ïSãë²Tý&k/Bè34/#*@¸bb¥j)ad"%® c§e\ Í¿xëâ"µ_5.DqªqA«Vãs,âj'Ga;KN×ÅÛVÜ©-;9ïÚx ÇIìFSìWRÅ$ø¦ÿpJ*¾ãÊ@¡Ì ºRÜé>Á#¡ pA¤'åïÌÆDü5~¶V*ÝçDZÆ]ãþê6|ÐÁÞ¶ >:ÿ¶JX*ÍVÄ£:#Æ vcjè;ÀQ¹mæ\B4ÑlÉ'%©(ET ¬ ¢²ú@Å¥yúTï2ÞQÅ5Z|訴~ÜÕÖ/BZ¢ú¿L¡UTÕSWu/;&GûN~a})ìKQ%p¥4ÞfêÁKzØÄ®øI¦ñS´f\å³;æñQ0Yv*ì÷HÌÇÊ!WÞ½E|9v8'Sø¶«ììö ðSw81HBJ<rcqfm9Q¿'¾ «Éçcñº9ò¶R*Áµ¯Ð¸6bÿ×ZbGÛÆWm#Àv¦4ì?FÿsµÙäöëíÆúêÚ:Æÿ\köóx ûÂþ£°ÿø¦ì?¯}çg|ro\çù ¸öÃWçþä¶ý/?dïXÿ5²[|ñöwÆÿx±÷@A@qsµÀ]r_@*æË*S¯¯"Dl|#}ð/榾ÖõhénUï±rßȤQ¥PKÄ]ÖÕ9 y®ó ¡ú÷¸»öÝîÈ.>ÇÛ s9 J ºrLú*1(%l?¶Ðù)¨ßÐÐåE)ªfG¡Pg^B|±¬§£SȼZr!U¨¥ÜÍ.ªãð$1ÆywtlþÒ §¼fä&ç#P*üCT\2Ò>qÁrðŤ¥ãP´ZBþNK7!mLÃþÖë>gZسéô5{mµÈOQölLÑ HÁþÐ%´©TUÆ1ëë¡ÿW¥ Ô)±é- Zì2%ÜâÊÔp/áIo0!ñf1Hý'LH¹ÈßbR (Wô p,xB bGVÚ5Ån2`lÑlÒAéD½áUæùáW1Ûá÷ )"mÕNC ªÕ%¥:Ò©Ë~ÈW{PNAE%«Ï ;Jâü5Ä(àñB°>hU£¯]åF>IíéB¯FÇ4ä[I-ü{³°ZPì}mCÑË|¸«JxDhëèÎ1ìªL,ÁR`âdb¥¨«ZELI^ÏxI n¤¢}t8a24KÕ%dùûA³(Tò´Ä¥V^9Ïàú½êM®ÙL°¡(=¬04l¯ÜbùUÙµ¡o7â8ß%åþ>AH,z¶¶aTXOfAÛ¯OëÎöþiç¸î¼îü´wXwvö@¸³ÿî_ïìÂÏ·Ä0ø)L[ýícüÀ÷ÙOr¡ît~»¿¤ñ^=Fã§ãíCFÌëÎþ+%Þ?ÚÞ w~©;G¿2:G§{oþ¨;ÇÎiÌqç×£_Xªã£ýý×ÛzLüDÃJøÞü|ô[À»CQ4]WÕ_·wÞ½;ÐÒqnaLÄá!ö¦ïsCÕÎÑÐ ªÄU0ùk¢ÃÉ·ëÇP± 9©>}û¬ã×;ÇÊ aÛ}] ¹ö,ÔBfc<bKb4YÑv| 115= #.ö<ª&²k¯:¹~D¦8? %µR+éT ÅëXDjJé[©u¶Í¡I `¸Üû´q.]JrG#(,© 1XD2ÚõÍQ÷'ÜcwÉê¾wóþ ú¦ &ÞU=E+kíJ6x*+ÕS²JÓ"{}XþϱGóåï?TÿA²ô÷µÅ¢*Ã;ÅcTVÌRÍZ&4l\Ï$GBÿöÆY æÏÈ; üMá1t¿ßZÇ f¢Çiº6?ÏÀR7NZ¢Ù;éÍ^g×Z9(¼ÉëA5d{>ûwè¹cçCÙ GÀ!«PÁæ/Ø48ÆdÕ¸H¿ÙE¨Ðç±Góäõü&ðQ1ºôJ©2D©vÉQ]±;%³Óåòæ¦\YæúTzúeöØQ!I}a¢ÝhkÝ[GT âöAÆIíÁÀëâ§yàØ!Í|oheëIK2æ MB÷äË¡ÓË=/¶¤õdBA°¨g×Z@÷ 2Yc[*[wÞþ¤õ°5èµaSOQ{e£º>å¨QñÆVm¤µkõZ(ÉÖ-ÄÒ 04s˾tîæ³ÙyiE7h·g;ØEåJ!×ðU43 ¦97DÎäBz÷ u6ó!Bt5ß¹ÿUPÔÝ ,$«MÁIòsâÃqþ=8ç+ßëDGZ ·t²hH£¬ÁǦà4«QyÍ0ÐGi ÓºÔO`æ£zÀ&Ècٱͼ0ù5ÚL06[ë¤aØ ûÍF³¡;ØÐйÂð×ã<ämôùbDáHâ=¶\êÃñõ» ¬)To~ØÏ +5ALVfT®¼Dk-¡¬Ä[îéNôYFr°©ÉLÀ´41fÃ`Ci%Ú÷;éSÙ]µÅï¡ä ñHï¿Û6O{Ñ#ö'w#çôí³3/j,©äîK?¨Øø¨tØy(7kÒ°b¹µU5ªïú2êäT£¹¥+<ñÄ6"¦QXºÂ¥]eMq·5Mß#BÀ¡®Çc`äÑFtï cÂKUF4vWfÞ}<8á¼¢Eb ¿xo½¥/¡¼áuÈíc¼4 ¸= §Ú²ãüÆ^H"²µuÒ²ÿ¼+K¸4<EÌy(M%ÃÑÀT+ï?<ùðò£-¼0%Õùí¢ÕËáñÀÊC+Ô¹¸ ¦Ü&°QàØR§÷TݧO?Ò1áíöñöA÷dg{ûø5c/ìÉ ;z»ý_ï:¹³éÜìû1÷iÂ?"Þ°gß¿Õ1üIJ~òn³ZwöOäÄÏвӱ¥a¿bójy¯¯ß²2üjì®·ì9OsËn¸X-rÇ\«É"còîÀ¸Oçù;´ù½ºBËz».<ôÔ~IÛØCL/¼cÿÏ"jt(>ú%1úAK7á¢`ªYwÚ)ðÏ ÓAwK{ 5tgÚ)7nzÜp`C¤;/Q¶t6MAúÎxçù0¥áê%nö&&¦£ß2iÖ͹éN!)¼¿&ärg«6úsÙ4^õÉèU?16^]ÛL8é1Jìà¦\Ú ¤ÌxÖ³òÃYܽ]ã@ÜLÀëjìd8{䪮³ïܳ`<ùBzOpoC-qüFBñYý¾ño\&ëXÖºÜ/I²bî"I¡@*¢·2iÔª)ÎG,wZãÅ4a^eÐü³åtÅVø^/Mg VâZyYXkÈ¿yä¸>;.lÝë+ð~ZÐ×ÔupsÐ+wÓ«³6°Kóö¼+î]j4®Ïþ¹|KG?n°Èjñrb ®¢jF>ÔEeK :¤æuÐÿJÁbÈ4Ü*@#²BÐHÉZתDlþ p·À"Meåýÿ¸Kÿn,ýØý&V.Hö¨Î¯G¬UºtßbGÆ×;¿þº½_,þ/«Ìß]VN¥V¶\úDmypb1$ãßãp¸.?fÙ`µBlÆ%òX»hOøÈUm=¦¶ÇÖ[%àI©Ä£ëÞòI9F8nÓæ sËÑÄ¡[ 98v4G\+& °cÏSy=5¿o|Ì¥ôq²ÈTñµj2»² ¹=êÇ+32Å´¤é5Ó5ï$|©#;+±£éáNÇj9K·Ñ£®Þ 8÷KêfÂóìd4½KÇä2ÃdÍüxgfAk²5c¸æYS<³{"ü«ðqð_Íõÿ³Ñn¬6ÿ¥]à¿Ìã)ð_ üÿåÂ9xã?³z¡ó<ä/DS=fËâ^oÓ»Oý³Ó\n®ã2\i¶V§ÑÞlþ°¹¶î0ìtþ9÷F{9ðÏÇAô'èxâÙò²à¾äÅ]ÁÚ'â®<À.ÉÞñi¤#$$7â it)÷>_ U\ Ð!U6Ø¡ÀQÊr 3ÕÈ j¨ô*P{8Æà.Îø½Í©`+hú([Ö4Ë"ìÔkÁ1+ùº®º½3k¦:UÓ;LUìÓ¸êó9äo%ì#.`[Ä9ªú§ÆbÉÿrë®ôNÝrÐc~ÝIý¦®}Á§ùÚl¥ÙÇòÆêkºE|i&n/4`{õ¼~-*Å }:/Ù̧$ç,'èºãû`<¾ñscÔL/ !ÏÞ·Ñö3_5x¢öÔFÌÔ],u÷ÞÌ÷]ä1Ûæ©-£Æ¤X#»zনÁÓàvÏêQâ¿ß"úÑ(3ô¿ð©ÿe?ýï<Bÿ[èýo¡ÿ}lýo´û¸õÀ à,ï*_ªð4XÛ¥¸¨.ehK9Ô¿Ø%-ø2¶&~XÖR4ý¢|TÂñ¯q}p©T²©ñu\û¯¾¥EFIîY^\2ÂK%0«O\÷[R¢ojßmÊÞs)åVð¢16àMNn&VF&[ÅJC¬ëXù»HÉÊ)9[Rü2E)ÙýG§êAmúWû(' M9X2é$O"g´¦4DEUõ ÉåP¥<êÄÙé©HÈ[J9R"¦ÏY>eï§ÄüÙAe¤séGFÅ1*ÍBO8 "ó¥+¶.[ÇôR¯M¥Ä:Dÿ¬käx/×`kJ»Np0¥Ùiô¢¯Q±6§®&eÜ4=ÉÙtÌRíÜz·RÿÙõmÊö[ÇÑûÄßQù,uZRBS&á*´ä¾S@JYÚ5Ü I¯ÆûŪX#-TjS*ÒâÆß/ ¶aß ª}'xgÆì;ѰW ϯáQí?Èü3Óþ³½ºfèÿBÿ7§Ðÿú¿BÿWèÿ[ÿw¥¶Üüsè/ÙCýå7ùüâ->g`ðmïY{þCÌ=¿B³Î¸UgaÔ9+£Î·é|dÛÍéæÃ[n_}4°´Û÷Õ©AȯÒV³°Él*g0d1R3·Îü¬0#Ìi0ÀóÁm-gnjùETþ£Hÿë?ùgþ·Õhúßúß9< þ·ÐÿúßBÿûØú__7ÿ\}`ð|¾§¨h :¥'ô*~Ôp"Ë¥R!ÒöjÖþ½7ý4ÛÍØÇlÓÍÈD3¯å&|7³ì2]»]ænYæNx'bô g-+©ÊXö=EÃÜ¥rÕhÙ©l®TØ»pS§aKÓbÔú1{ÑÍmI±(Í©°£¤ª¤Z^"5s&&OaàP±Ø|ÆÃİåÒ¬5§ÉªÃbõ1Q}Õ5Ú¬dº-ª¨5ºy,&(ºx¢«(pzK×/Õ5§N®Y¼âvPóCÊ åiÝðPÝ(£bzí÷²tý²ÍXówõÔÌþFEg¾î¾µ«Õ5Æðò·"FÒÎöüÈäõO©JAFÐÊjÔpѨ2ö 63äé21á3(ñû*÷ký#ä^§t8&3Û'ªºõPm¹¾¼íƶ¤vaa6á=¬FbÙ3û@'##@,âñ£K¡ ¨*ãR ß,F9Ûì±bÚ_À²mXXNôý%/_©9mW¾Î¦*2CëîBoþM<þ?8÷xûïÖÚzõÿÕÕµÕ&`7ëëk þO¡ÿ/ôÿ þÿÒÿÿ_÷Êýeç-èÿk0zÉáõ_ËLJQþGmÉów w¿8»çlVü Tì4XÒ÷TÒP7l:-/³±;ÚÙãÂ<j_w4òÜqÓCªhnÙú^@l£¡sÁf*{tdLí:Ì!GÒfÍÃoèýs~5%xn&ùU0Æ;ëÐX¨âj¤K÷3NÐ^@ë¿ïy=¬ñç°PÚR»r_|¤ð°À ·¨%y²»GÁS*?_r# QÝÜ Ðî;ß²@æ¤KóÛÀc(,¢- 3ì^¹#'ság@<ÆRÄw0×\9§ÝmFéà¢?÷P½y1¿ÝrZª$N5ô<ízbÿÕ4ÊC5AãÝA-'!#9)Q1?Ø¢(DõSB¦Ò¹XiEêWÁ2¯|Å0#³¹´O ×Vp×ç>±à·ûÁE0Ä«$öý!o«#ü!JȾ¯Áë#å1n~¦ºäâÊPGófGúôAao\ êD,yÖ¹Np=ÁE%±í,æ"ÂP§Çï:Ú"z³½ÒÝrDÙ6VPÚmùQ¿OpÑÄóhb¬- Z¬ìͤÅ1 wFaúT¢÷q~ÇI3* ÿ²ò(L3] R@©GgæaÂ]C3SPw¬{B\fcPæ~ïKøÚìïüøzt;Rý ÷Ü{BõËïlØ«îÎÑÁÁÞi÷è°{òng§sr"©*<¸¬ÑY5Ï4íÒBÏV¤Æýâo3@vÄò|/Ù;eMÂ:M3¾ÚøôQO´8µÑÅ×%#r߸è3:güåõ¬ëu%Ï'.ÔÃwûûª8å£>` À£b.ÃÔËZ'áNð¸C\6A`Q¼]Â¥)®Ìó~;î¾;>ìB¨/ö^Ä÷Õä³ÞéêûAVaÈëyáMò=qRÒz`gDvþäi6!\ªXÎäû,FZ{}67Ù±ÆçúÎU,RJP'ÐfM 2Q¡#@®Uv<áî}üÕ,hË.A>ÿÒ©â´YY®ÝçZ?ÁJ.öçªuØ©Pi » lºClRðæM¹6(¤y¤Ï1Í4B°(n4¸÷ÆãeDNDuÿ±`\9 "q £®ËõçÁàújRðuÞã¬w`1d/XÊ Ïæ°fÚ}°Q;4ÒÌÌâÃ~<B>z1çíýIáèUvKªw>ùë*«;d2 ÁùùµØ:E±cX2$Ï$x!!ìñPx?ÕA¼ºVn_â¡íá³bϵ«ÑRdÄöúzF./bþ0¸òP9*Ø0À»øÙ·t ÚyIH½×ä(âë-©-NÆÍt?Åäøò}J&-2¢bý%Ç=æ5êh¾¥w¡<ðÂqñ d^v´ãÖ1Ð.äÂì¥Æúõ7öFuHîØËë¼qà'jжQ¹ñ]ã¤êZíådË$ þ¤ZyÿáÉ+Úñ9[d²×& ª>&qØÏçQ{à婽|úMȺ `üÛûE_(ÐJç ¼¬lâ_¼¤÷TüÓ§d°Ô}»}¼}Ð=ÙÙÞß>~F ÏÆûéBâIGo·ÿë]'Fâoq2<óAkÏzÆÿ·®»ªæ,¡®ÜÒfÊ¡µuqèÝÐ(.ÃÙ¹ÖãåMH^r_F+ètÌo×Ï4¬xÞMUèé[0%£VÒ©&SÓ%°X±Éu! ³ÑRV¢\ÊñMï:\û:±ëuPFdte: áø-ÖëÐs ÂDyQBºúj¨m¡²2º to¨Æº³ ià^S Óü'ÃÖ)#ø7£ÄÖ×\d¤VûN¾Nðår«ñlÑ)«Ñ¸+P(Gð'¬µEñdV*0JD 1j"ûºe0YR.úÁØ£$VwÊcrREÀuW ^Ð)g$(n.ÁuÝÙ52ÞÕugµñã:kÓwº\«6²3>¬:ý+[ñc ¯sz}{è^±æüjyѯ+Õ^jÊ.LÉW§Öbé÷ÒJ ¥3ä|Km[ýôÅáÌêÚ"þÂËR¢ÑÆJÏÉ ¥ºbâÕ97%APã^dd 5Ñ-`àDæ¨&'È4lÝÅ ¿Õ°a,Q3ù`tùë~ÓÞö&Õ)[àÙ¿²4o5-üNñíÝÔïy{Bèª}qÌ^:háà²_X°zp¬Ï×=q?³zX{è8ÑøáûÈí÷ñA:£[hQ«CdpÎn£®uãý¾ñÚ¹u»C8au¹Ñ7â»$ÞÓØë±µ©7HÓ¿ÌËÙþºT·àz8Ã&«9Ó9ePÅÜ¿b¹&3LS2¤ZO[evc½Ìä8å¥óæøèÀé]»2Hvd¥ù"0)ç¢ËXíùeµ²ò?Âï)ó¦'O4ïï´<B(ãC¨æa'ÉãAY©QÈrDHì½?¯w2³½Ê®~`ü]'³×]&àÜs¯Z®$SEr]ÿv÷+q£{öN3ºÓ²Ñ={F÷coÙ/ýa0öf]Fºý7<`ÿÝ\cïÖ7Ðþ»ÕnøßsyN·:)ü<¾Ý¯ÿÓíÓw'TFÆúo6Zÿ´±¾±Þ\[ôÅúdzûÚéýÏL6ãF§Û·Çþ_'·WgÁ |Çò_egÉA;Póx½ºsv=AXM¼ÀX²5Y0ô@¬CËLzHKÆx;JxAÖdB¥\ÛÑ¿[i!PËhfæ`.Ã×%ø:¢º¸~ËEß,,tÜóK'ÄÝÒõhäA9ÛCWl¸ÜáÜAæåèfAùÞtØB;îHÉ@dÄ?wð'ýruK?Qc?{gçðstAï)jÌb{Å þðó4ëý¿|RIJ{Ñ)]¡5ÌÈ34~Ê÷Ê]JBZ3Ï_ ï\g·Â~JZÏø)Èü.Þ³¾÷:d³æÏNÂû¨^êÑæ¾mDÃ8ÈÝ}µ³µ\ógRY¬×`;ßݼ]¹£,txø7óç©ñ· ÁÇdé~øþÏÝÂÿºÌ¾ýÙ ÿÏõV«Ýn!þc³Uà?Îåyþ¹p.Ü*³¹PvØIôù[î'xz;ò¶ÊgþÐß_,8ÏAwþb÷õóü ½8¹¾ºb_H׫í3vF&áì»·ÞøùHøþí¼1ûËyNò¾;_0ò/øLüçäÿCÅík÷Ó'o(KvwÀ£îW}7,ç+ô³¢ôüØCç=Ìö+µökìóñ|`Mð^´æü÷Ãó|u ØæþâßnVî¾=w 2ÎÊXf5ÄäP¨Üçoü·ï*Ê¿`ô}êøÄ:<¯à"ô´JqËR`d+ÙþUÂìY¾,ÖO)ßn¿ rÛ'&Ð$|B'©y·PG ü¥wèÙü /åø} \äýá¹AÞVÚàåLÏݧɡùàÂ|¥d39 ¤èÍ¡wÖÅ^aäOÞʾïÿÝmþèèÔ9sà¤]áÚø|¦,9LU;ÞN>üäüþ45ºú4cÌthOÙµ)Ó¯N~}ÊôS¦ÿaÊô?N¾ÙȸÞsO3%uNQHwôyçHw>ôyçHwþôyçHwþPú©$e~§b^¢yç5OoÎkú ç+\F,pþÁ?ÿlï²ÿ;Ç ÎºÿioÐù¯½ÞXk´Ö ÿgYàÿÌåNI!j+A,r`¸ +¤!7ºÒ$`¡³ä¿àÛè<ÁÑÑÍy®Õ^,Ý&f NüCh9áãkßùÙÜ×y>®ýðÕ¹?¹í_ÿËٻ塷ü¯Ñí>9¹L:?ðb»ó¿¯ÿÓÎÉé¬}x²îíXÿ«Íâ5Öõ?wØñ½qtïãd?¯%gý¿Ãþÿ ýßaÿ²ÿwÙÿ'4,Ù{ø}ÐÁó ®AìØñb üãÿCçç`< ARêþ®üþ¯³´pê_9ÿíºV/'rd½uÇ|³bw!öÖ½8?¹ãpãû6s×úÞ îl÷Ü«{×,ü·ï¿Â ?¨Ä8ÉÿW#ö¯«Ëö+ßO ¹<ÄÔZ2b¿xYßÿìÇþ§Pwh¦ºkèO~2²f;×ç|<<»>¿L%>²ØÂÁÞÉÉÞáOçÓ µßsÓáÔ~_X »Mo8ý}óã¦s´ûzǹÆ;Ó½×Lh[ã7òðýN}T;þ76@ÆO´ÿjÈûæzöÿæzãÿqÖ¨>ÚóÍïÿÊø6kæeL3þíÖ:ÚÿµñËcE±42²Îÿ-óVsm}c£òÿêêZqÿ;ð5äÇ2]D-@¨îÞ(`·Ê8G6WVdÐv;àäÖâä ɽYniéÝó½jYYNy,½¸ð&^2A©ZcTþ.ÇçùXÖ¿¸=YYëuU¬ÿµF£ÍÞ7ÛkÕbýÏãYZ#Å;0¾îÒÒKõKK'¿ì½Ý{ÃR «p8«pÊÑEù,-½ÙÛït2²èËÄ$üPÆáQYÄhÞÂåÈu|òÆdeà1\dGU!'È ae;¿¿íì@ÃcÅ-Äò}ÅüȺþ[s]ÿÍÖêÿæÚÚF³Ië¿°ÿË[ÿj>jgl%®{l?WX@- b ̯ܢ !Þ//7ðU_µP3ÐW`: Õéy}üñøÏ ÓtZN[O h¹RÉ`Üó j!3!HÉd®sæ°¿2éåÐÈɹµB(¯ åNnu®ÆH\vkl§hN¼¬ö<ö2ùjÿVõÊÈâÿM<ÿ«þ«m¶üÿÂÃýѨD¼2GÕBoÖïÑôö øÉ??Aàö×íÃ] L|x²ÀÖ:8.Uø,äpG@¯Ôp êG1ÎÇ;ñVzã`Uÿì¼OúùPÈ¡Xu@ò;Ù.ÔÜëñ3n˽Ká$Ãk°l®¾ýùm÷è¤î4êN»påßöË h[^îeζaî˯zNÈkBÍ*aØÙ@ø+LØGry§ðï41Ò%ÅôDüø»½³*uVÝÉÈ[Ôÿñ ÿ+RÙlÊÈ:ÿ¯Îäÿ5àû«¨ÿkòÿ\âÿI§õ:cÞUz?»ÃÞ @Þv¶y`TBz=ãI)Ìiy÷øès ÑR8Jrar§Ç{?ýÔ96éíw¶O;:E§ê:{§¼Î¤Ì_·w~Þ>®®6ju&rv~?;=gå«Mz{'ãSÈ~$Éýº½ÿ®sR]mÕÊ«V ý. à [j6ZÍJ-gd}ÓzþoÏWÿ×n´qý·ÛíÊìüß(俹<ýêSüx Ã)%® Ý ÿèǺþ׿»þ[ë\ÿ¿Ñh¯5Û¸þÛÅúË×ÿIç±ëþåkXÞªZÙ\Û»¯ÜM7áùòw«¹p¶UX'Íî±®ÿÕ9¯ÿÜÿ`'úÿÿi.eÿ8 ·÷+n´ñ}¿¹ÐZh/¬<`&uý¯Ïwý¯5éüÏ6ÿõÆ:ÉÿF±þçñXÖ¿óx|@qzóprÙ¬³ZðO+{øZàyã_-í¯vôÝ·¹°ÑÛhü~Ó¿ú÷ ûï`øý\&¶, *äe0èyc¼Ø=w|¬ëcÎö?¹þ7VÛíÂþgeý«x[ó]ûG&¤' ½i¸qoM`N-ê £@m(õo^°®ÿæºþ[²ÿY]Ûh¯ýÏjaÿ;Dzþ5,ºGd 6}ÕÕ¦¾Yw*¨Ï§ß×ò¶´¼ÈTúÕòÿé9n!)z"cuÎZtìq³8¨ý=W+71ÂtÇð.#|ÚÑÈ:¿ýÜ9î8gI[`-§ÇÊx¹Ëc_gµ/¥9èqݯ ºÊÿ k¬7Vid~áà«e½üøZjUwÊ£`ÌV ?ð'·_\gqm¹,4´I¾ÐÒê"¿Z«6òÆý`|åB$Q#£2êÚ·¾{ßÿ±îÿ?Îùþ¯µ!îÿWÙ?´ÿçÿ¹<vý_ÊÖ?«; uçׯ\¼ô.këì·rQp=ü4nxäÅ/ä}lë£>ͬLûÏÕU\ÿëíÆêF³UèÿæøÄïÿ4håÇXÿ@glùoA57 Ñ8ø|òd¬ îáÑÉ»Ñ@I2I)¶÷;Û»t;¿ïh4ÜÄ¢»¥ØéáÖbçèðäôиÒRíîýúß㣴${LðÜÛí¾;xÝ9ήó½Îþ®µÎ}ßôÒüqxºý»WUÞÌø~4þp³/czüVc}£ðÿÇÿ»ÿfÊÿk~ÿÏdU¼ÿkûÿ\¹ÿ#âé?{¥%uOÿxÛ~ݺ¿WÞ¢>÷Bpv(OÎGO¥ÃÓf»ÙVÃñ ×è@dqRA,óßVX+eþyäÅ×ãÁ_ÿ3wÿÊáÿÛÖÿ:ÿWÙA Xÿóxîâÿ }_ûáÐàÍ3PËá¦jñ¼ÊÉKK u$t8--B÷B{è]LF²dc«%£¥} ¿4¨´tK¢ëQ§îàöå9L|eÆÿ õ{æeÜÿüùÿáËø?*þO³Eú¿F»Øÿçñ¨ú?þÿçÛÅÿѣ̬iðÖ7VýÿØú/ð üÿçy¬üÿü¿W!(ø6Û« ýç\üWøCuý?ÿ§²þ× ÿÇ\Ëú/ü?¿¡Çºþ ÿa½ÝXoýOÿi.OüüWà?|Kuý?ÿ·¶ÿøsy,ûáÿýúëÑgVFæýO˲þû¹<õÿOðÿÎïï&ÊÃXZè1rªîV ¼¸ò?ußõ±®ÿùú7ó¯ÿÕæj!ÿÏñ±¬ÿÂÿ»ðÿþrý¿Ótçäv¬ oc'°ðÿGÅÿnlþw«àÿsy üïÿÛXÿsÿ:_ÿV×VÁ¨Éqÿ;ç.öÿ¤'þ ï±³3ùGr9lþµbÓâ¿.¢à/`пö÷Î ·¶Ô¬ ½}ñ$>þ?÷øÏÍæz$ÿ!þËêj»ÐÿÏå:þ3) lñÞñ|¬ú¿ÇÄZ%ü×f!ÿÍå±ÛÿøOßÊc[ÿóÆjµ#ü'Ô÷s{âö?þÓ?ÿI-¢Ç¾x?»uþí)À¡T2þð³;ð{ãÂgÞ¸ÀúÊÿ÷κ}÷|ogºdá79þãÿÍõ8ÿ57 ýÿ\ ÿonòÁOºôE]¸¹åÄZM¸Û¢²Ð²8++ÎÒ÷KÎÎÓ§ðs oïÃ'2ðî;Ðéõ6I ¨Ão¿¹ã!lFIçÔ Å3÷ü7ì ;»·UTo}Ðò Ú¸|Ú5ù»úÇòGpîÿ þ;)çøá-^ þؽIUÖ½º¹ôS°Í¢ºè×EPÉÕXÕ<÷üRIiø+9L¾ép ¢Åàì_üΧJôè3 |óCì®*$GÂ%5Ph$áâ:xaè^xÕÚ2ÙË ¿ozJ6r òMÉî5´\/ÐýSæÐÒÒÛ£ú%æ¨C±éºÕð7U`5·#oÿ®³/´ Ðß5I OËO/dvøSɪã¹Íìf~ÀmÀAàÖ p«y¥å§2;ü©ä?Ì F¥eÆQfö§üc+ÊMç:5;#óãß ü;"@Ó]£ ^IôBÄ-ßcs¸âI{ÌýÍãzáp@Öùoúßæ{·¾þ«íµÿk.¶ÿãàïþóþõ1@0;BOé+8Pëz¹î¨M¥´bScÛ±«i1Á¥øXp6è%í²<þiì]o>.WlÆÓÀ_p@£¥PØCVVð\¾Ã%z!X¥ìÁæ;~eUYfå{óóºàãuvlçÁ IÁ3¿.®Oëâr¶..gïWòÊFÇ.ÐöÏng´!ãßô§Õ}1º5ÁLQ¯®¬SW.à¶ÿÔEßÕ±]Ø&ª ö^uY]P«×YwÖYwþ÷8ÿ£¸8_ü×µµ5Òÿ6Ûëÿq}½ÐÿÏåQõÈoW"vûÏÛæÝóû}oì±WQÔ·PpñE«Þ,¢Z{ÆÛ°èY<ñôX.OýrôË2¡æì®ù¸ÆíÎÙ¹Ú1~>`Sô¬ÈA}{CMÑ»"?üº}|¸wøSԺݣÃý?Ò©dM«ôÉ#:©î(o÷Oï9ZÁÈ<2«ºlûìý§Ò)EÕN÷ÝIÔ½§{;Ú}ÉðQ¹7¾rëxÁÂ{±ëm:W¤Ù*'\+1×ÖR'ÃÖØ\ÎÀûì¶ÁÄgÌh4öúþ_[å²ÎÃüêÄo=ïìúýò1£X ³ÌÌa Øxð©oÕ;QjëÁK5¯gd{Û3*óJ½ðßÄKÑ×£Òü5ò5v>Û ^0ÜÜ9Ápp«4ys,kH2M¸û ·Ú>?¿`ÿ¼8Ä|ÏWÎ^l&]»9þÐa)õXiÁvà=xßj¬Ã+$oïy ÂU>Ò³&ûrùeø¬H?¶¬o{¬ç¿ùâ¶[qÿ×l¬þçF»°ÿË£ÿ ï¶ï_\ÁFOîKpgñÆâ$¨Yx$Â0gñ£`Ü¡ºÚøq¦êè®ná×꼫ÒïÀèîu¸nØJ¼ú{á| ¨õW·ôÈ$Q`òÍÍü%.~+§Â½ë¹H3ÈËúÁÉehìú¡ÇO|+U)léèíyÄÏ¢"Ñ6VJP¼%GµlÖðÂO.']æÎöþþëí_êbâåì ߸M«H,ñýªD×Ò0êõ£ûµ\µ3ÆëfXNÉ9.Xçá%suF¥ZfÜ>_2Dë¤bgN1&Þ{YSFïHHü²Å®7c&Å¥×>}Je×]/5w#{ü¶MþÓA·gVFü·Úâþk͵u&û¡ü·Qà¿Ïåá¢\öN¶»×±hà×IJ'róÊBÊX*,1˳ôÉ7U¹AÊ\§Ì÷Òî'ï6¬B¶Z 7óýÎÕ£]¼Fy=÷XTûWÖ¯\o Õß}Ý}Ó9Ýùùàh·Ó=:Þíwvk_J§Ç ësµbûäähçjCûùµÓf>d üóÉn [ÿR{hðàã5&}!1µxG=û ;ZÆã´Ñú»ÔÂxÎ&ÿ+³,#Ëþ³½ÞøßàøËÞ´7 ÿÿ¹<\þvØç:_r%X ½êâUxÜ"æCðLÕÞBªräÀñRàmÝYjÖï¶P(t¾j¬6Í¥ ïi$ ¹)r!,û:#z\?;ÕEl<sØÏçÎü|úTÔ×VüNBß-úh;±²²kÒ*üw^¬@µeµ<óËM͹Aü¨F#åit½ÑÅ&b¢VhßÞÀõ¸Æÿ;³*#3þÅ øß«ëhÿßjñ_æòL©ÿѼ(*Õa{W@!í}9ÿáíϲ,ùo£É×?þ¸þ·Ý,Öÿ\;¬ÿ¦d <RD¦ô²&VÞ¼ |ðËz¿?ý\¥PRSní±#èü<¹õÁwËxW£¡{U-¯°wLN)yö[ð*.üpâ»áåõ¤Ü»B®Å+¬sÄõ7¬ ʺðôoÆþqÄþ½¡ÈJhCÁBûç ÄÒ½Pvh¼µ)n7Zµ¢¥¹nf¡ÉPÂ+'ÓmEtëN¾5ù¶JÂmTê¢ÃÒKj%ñO"¼Çtº~)1o9räÌ= n2ÁóÌYͪ;¤ÇßÊÉKLªÈ1ÎÜ#z×C¶0?ɹ§ûì£æù_Ä]%ÉÿÜn·Áù«°ÿËsùï®H.y¬Í^ý|¦ÓÀþ¨}¯~þS²Í®¬õ¿ÞäøÕÕÊëkÅýÿ\Zÿ4¿@ùOrÀ*7®Mñþìõø§º#*1ÏØÁ~QU*ûߢk§%~è`*.B¸VÀ v¢¦ßZtIE#~f?Câg¹m-ö¦ôôcpmýGÈk3-#ÿimµ)ñÖÖpýøOszfªÿ§tó¹HT ù?JrgjÝÞ°ïôÒì^xL: ³Q0^ÒZÜ·±Jû´4B-Ìi5Ä >MmnÜ$«ô¿sxtê¾Û߯;o÷¶ÿp~éüQe[M:3§z&iwÞ°CááNçÄqYUõ +£-¥§;,¦éÃCË}¾×Ic¥:'øî-Lk¹N:§x¯¸gçåX¾Újâ#>ebí½0y'[hâ{¶H!UùË÷§x§x§x§x§x§x§xçÛ{þðl ø
Index: php4/pear/pear.in diff -u php4/pear/pear.in:1.4 php4/pear/pear.in:1.5 --- php4/pear/pear.in:1.4 Tue Dec 5 18:52:37 2000 +++ php4/pear/pear.in Sun Jan 7 18:45:28 2001 @@ -4,16 +4,53 @@ require_once "PEAR.php"; require_once "PEAR/Installer.php"; -error_reporting(1); +error_reporting(7); -$pkgfile = $argv[0]; +$stderr = fopen("php://stderr", "w"); +$debug = 1; +$optind = 1; + +while ($optind < $argc && $argv[$optind][0] == "-") { + switch (substr($argv[$optind], 1)) { + case "v": + $debug = (int)$argv[++$optind]; + break; + case "-": + $optind++; + break 2; + default: + fputs($stderr, "Unknown option: $argv[$optind]\n"); + /* fall through */ + case "?": + case "h": + usage(); + break; + } + + $optind++; +} + +$pkgfile = $argv[$optind]; + if (!$pkgfile) { - die("Usage: pear <packagefile>\n"); + usage(); } $p = new PEAR_Installer(); -$p->debug = true; +$p->debug = $debug; $p->install($pkgfile); + +function usage() +{ + global $stderr; + fputs($stderr, + "Usage: pear [-v n] [-h] <package>\n". + "Options:\n". + " -v set verbosity level to <n> (0-2, default 1)\n". + " -h display help/usage (this message)\n"); + fclose($stderr); + exit; +} ?> Index: php4/pear/DB/STATUS diff -u php4/pear/DB/STATUS:1.12 php4/pear/DB/STATUS:1.13 --- php4/pear/DB/STATUS:1.12 Wed Dec 13 06:41:04 2000 +++ php4/pear/DB/STATUS Sun Jan 7 18:45:28 2001 @@ -22,4 +22,4 @@ fetch modes x x x T x x T x transactions x n n n x x x n auto-commit x n n n x x x n -error mapping - - - x - x - - +error mapping - - - T - x E - Index: php4/pear/DB/TESTERS diff -u php4/pear/DB/TESTERS:1.1 php4/pear/DB/TESTERS:1.2 --- php4/pear/DB/TESTERS:1.1 Wed Dec 13 02:46:31 2000 +++ php4/pear/DB/TESTERS Sun Jan 7 18:45:29 2001 @@ -11,8 +11,9 @@ jmh3@linuxfreak.com - - - - - - - X - Kevin Henrikson - - - - - X - - - Stig Bakken - - - - X - - X - +Chuck Hagenbuch - - - X - - - - - -MISSING TESTERS X - X X - - - - X +MISSING TESTERS X - X - - - - - X Comments: Index: php4/pear/DB/odbc.php diff -u php4/pear/DB/odbc.php:1.22 php4/pear/DB/odbc.php:1.23 --- php4/pear/DB/odbc.php:1.22 Thu Dec 14 18:37:09 2000 +++ php4/pear/DB/odbc.php Sun Jan 7 18:45:29 2001 @@ -238,6 +238,21 @@ } // }}} + // {{{ numRows() + + /** + * ODBC does not support counting rows in the result set of + * SELECTs. + * + * @param $result the odbc result resource + * @return a DB error + */ + function numRows($result) + { + return $this->raiseError(DB_ERROR_NOT_CAPABLE); + } + + // }}} // {{{ autoCommit() function autoCommit($onoff = false) @@ -271,6 +286,23 @@ } // }}} + + // {{{ odbcRaiseError() + + function odbcRaiseError($errno = null) + { + if (is_string($errno) && + ereg('SQL error: (\[.*\])(.*), SQL state (.....)' + $errormsg, &$data)) { + list($foo, $source, $message, $codecode) = $data; + if ($errno === null) { + return $this->raiseError($this->errorCode(mysql_errno($this->connection))); + } + return $this->raiseError($this->errorCode($errno)); + } + + // }}} + } // Local variables: Index: php4/pear/PEAR/Installer.php diff -u php4/pear/PEAR/Installer.php:1.3 php4/pear/PEAR/Installer.php:1.4 --- php4/pear/PEAR/Installer.php:1.3 Sun Jul 30 10:41:31 2000 +++ php4/pear/PEAR/Installer.php Sun Jan 7 18:45:29 2001 @@ -20,6 +20,8 @@ require_once "PEAR.php"; +register_shutdown_function("__PEAR_Installer_cleanup"); + /** * Administration class used to install PEAR packages and maintain the * class definition cache. @@ -27,8 +29,8 @@ * @since PHP 4.0.2 * @author Stig Bakken <ssb@fast.no> */ -class PEAR_Installer extends PEAR { - +class PEAR_Installer extends PEAR +{ // {{{ properties /** stack of elements, gives some sort of XML context */ @@ -37,6 +39,9 @@ /** name of currently parsed XML element */ var $current_element; + /** array of attributes of the currently parsed XML element */ + var $current_attributes = array(); + /** assoc with information about the package */ var $pkginfo = array(); @@ -96,6 +101,45 @@ // }}} + // {{{ raiseError() + + function raiseError($msg) + { + return new PEAR_Error("$msg\n", 0, PEAR_ERROR_DIE); + } + + // }}} + // {{{ mkDirHier() + + function mkDirHier($dir) + { + $dirstack = array(); + // XXX FIXME this does not work on Windows! + while (!is_dir($dir) && $dir != "/") { + array_unshift($dirstack, $dir); + $dir = dirname($dir); + } + while ($newdir = array_shift($dirstack)) { + if (mkdir($newdir, 0777)) { + $this->log(1, "created dir $newdir"); + } else { + return $this->raiseError("mkdir($newdir) failed"); + } + } + } + + // }}} + // {{{ log() + + function log($level, $msg) + { + if ($this->debug >= $level) { + print "$msg\n"; + } + } + + // }}} + // {{{ cacheLock() function cacheLock() { @@ -166,11 +210,13 @@ // {{{ cacheUpdateFrom() function cacheUpdateFrom($file) { + /* $new = $this->classesDeclaredBy($file); reset($new); while (list($i, $name) = each($new)) { $this->cache['class'][$name] = $file; } + */ } // }}} @@ -185,19 +231,45 @@ * @return bool true if successful, false if not */ function install($pkgfile) { - if (!file_exists($pkgfile)) { - return new PEAR_Installer_Error("No such file: $pkgfile"); - } - + global $_PEAR_Installer_tempfiles; + if (preg_match('#^(http|ftp)://#', $pkgfile)) { + $need_download = true; + } elseif (!file_exists($pkgfile)) { + return $this->raiseError("$pkgfile: no such file"); + } + + if ($need_download) { + $file = basename($pkgfile); + $downloaddir = "/tmp/pearinstall"; + $this->mkDirHier($downloaddir); + $downloadfile = "$downloaddir/$file"; + $fp = @fopen($pkgfile, "r"); + if (!$fp) { + return $this->raiseError("$pkgfile: failed to download ($php_errormsg)"); + } + $wp = @fopen($downloadfile, "w"); + if (!$wp) { + return $this->raiseError("$downloadfile: write failed ($php_errormsg)"); + } + while ($data = @fread($fp, 16384)) { + if (!@fwrite($wp, $data)) { + return $this->raiseError("$downloadfile: write failed ($php_errormsg)"); + } + } + $pkgfile = $downloadfile; + fclose($fp); + fclose($wp); + $_PEAR_Installer_tempfiles[] = $downloadfile; + } $fp = popen("gzip -dc $pkgfile | tar -tf -", "r"); if (!$fp) { - return new PEAR_Installer_Error("Unable to examine $pkgfile (gzip or tar failed)\n"); + return $this->raiseError("Unable to examine $pkgfile (gzip or tar failed)"); } while ($line = fgets($fp, 4096)) { $line = rtrim($line); if (preg_match('!^[^/]+/package.xml$!', $line)) { if ($descfile) { - return new PEAR_Installer_Error("Invalid package: multiple package.xml files at depth one!\n"); + return $this->raiseError("Invalid package: multiple package.xml files at depth one!"); } $descfile = $line; } @@ -205,14 +277,15 @@ pclose($fp); if (!$descfile) { - return new PEAR_Installer_Error("Invalid package: no package.xml file found!\n"); + return $this->raiseError("Invalid package: no package.xml file found!"); } $this->tmpdir = tempnam("/tmp", "pear"); + unlink($this->tmpdir); if (!mkdir($this->tmpdir, 0755)) { - return new PEAR_Installer_Error("Unable to create temporary directory $this->tmpdir.\n"); + return $this->raiseError("Unable to create temporary directory $this->tmpdir."); } - + $_PEAR_Installer_tempfiles[] = $this->tmpdir; $pwd = trim(`pwd`); if (substr($pkgfile, 0, 1) == "/") { @@ -222,13 +295,13 @@ } if (!chdir($this->tmpdir)) { - return new PEAR_Installer_Error("Unable to chdir to $this->tmpdir.\n"); + return $this->raiseError("Unable to chdir to $this->tmpdir."); } system("gzip -dc $pkgfilepath | tar -xf -"); if (!file_exists($descfile)) { - return new PEAR_Installer_Error("Huh? No package.xml file after extracting the archive.\n"); + return $this->raiseError("Huh? No package.xml file after extracting the archive."); } $this->pkgdir = dirname($descfile); @@ -236,11 +309,11 @@ $fp = fopen($descfile, "r"); $xp = xml_parser_create(); if (!$xp) { - return new PEAR_Installer_Error("Unable to create XML parser.\n"); + return $this->raiseError("Unable to create XML parser."); } xml_set_object($xp, &$this); - xml_set_element_handler($xp, "start_handler", "end_handler"); - xml_set_character_data_handler($xp, "char_handler"); + xml_set_element_handler($xp, "startHandler", "endHandler"); + xml_set_character_data_handler($xp, "charHandler"); xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false); $this->element_stack = array(); @@ -250,7 +323,7 @@ while ($data = fread($fp, 2048)) { if (!xml_parse($xp, $data, feof($fp))) { - $err = new PEAR_Installer_Error(sprintf("XML error: %s at line %d", + $err = $this->raiseError(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xp)), xml_get_current_line_number($xp))); xml_parser_free($xp); @@ -264,15 +337,16 @@ } // }}} - // {{{ start_handler() + // {{{ startHandler() - function start_handler($xp, $name, $attribs) { + function startHandler($xp, $name, $attribs) { array_push($this->element_stack, $name); $this->current_element = $name; + $this->current_attributes = $attribs; switch ($name) { case "Package": if (strtolower($attribs["Type"]) != "binary") { - return new PEAR_Installer_Error("Invalid package: only binary packages supported yet.\n"); + return $this->raiseError("Invalid package: only binary packages supported yet."); } $this->pkginfo['pkgtype'] = strtolower($attribs["Type"]); break; @@ -280,123 +354,82 @@ } // }}} - // {{{ end_handler() + // {{{ endHandler() - function end_handler($xp, $name) { + function endHandler($xp, $name) { array_pop($this->element_stack); $this->current_element = $this->element_stack[sizeof($this->element_stack)-1]; } // }}} - // {{{ char_handler() + // {{{ charHandler() - function char_handler($xp, $data) { + function charHandler($xp, $data) { + // XXX FIXME: $data may be incomplete, all of this code should + // actually be in endHandler. + // switch ($this->current_element) { - case "DestDir": - $this->destdir = trim($data); - if (substr($this->destdir, 0, 1) == "/") { - $this->destdir = substr($this->destdir, 1); - } - break; case "Dir": if (!$this->pear_phpdir) { break; } + $type = $this->current_attributes["Type"]; $dir = trim($data); $d = "$this->pear_phpdir/$this->destdir/$dir"; + if (substr($dir, 0, 1) == "/") { + $this->destdir = substr($dir, 1); + } else { + $this->destdir = $dir; + } + break; if (is_file($d)) { - print "Error: wanted to create the directory $d\n"; - print " but it was already a file.\n"; - break; + return $this->raiseError("mkdir $d failed: is a file"); } if (is_dir($d)) { break; } if (!mkdir($d, 0755)) { - print "Error: could not mkdir $d\n"; + return $this->raiseError("mkdir $d failed"); break; } - if ($this->debug) print "[debug] created directory $d\n"; + $this->log(1, "created dir $d"); break; case "File": if (!$this->pear_phpdir) { break; } + $type = strtolower($this->current_attributes["Role"]); $file = trim($data); - $d = "$this->pear_phpdir/$this->destdir"; - if (!copy("$this->pkgdir/$file", "$d/$file")) { - print "Error: failed to copy $this->pkgdir/$file to $d\n"; - break; - } - $this->cacheUpdateFrom("$d/$file"); - if ($this->debug) print "[debug] installed $d/$file\n"; + $updatecache = false; + switch ($type) { + case "test": + $d = ""; // don't install test files for now + break; + default: + if ($this->destdir) { + $d = "$this->pear_phpdir/$this->destdir"; + } else { + $d = $this->pear_phpdir; + } + $updatecache = true; + break; + } + if (!$d) { + break; + } + if (!is_dir($d)) { + $this->mkDirHier($d); + } + $bfile = basename($file); + if (!copy("$this->pkgdir/$file", "$d/$bfile")) { + $this->log(0, "failed to copy $this->pkgdir/$file to $d"); + break; + } + if ($updatecache) { + $this->cacheUpdateFrom("$d/$file"); + } + $this->log(1, "installed $d/$bfile"); break; - case "ExtDir": - if (!$this->pear_extdir) { - break; - } - $dir = trim($data); - $d = "$this->pear_extdir/$this->destdir/$dir"; - if (is_file($d)) { - print "Error: wanted to create the directory $d\n"; - print " but it was already a file.\n"; - break; - } - if (is_dir($d)) { - continue 2; - } - if (!mkdir($d, 0755)) { - print "Error: could not mkdir $d\n"; - break; - } - if ($this->debug) print "[debug] created directory $d\n"; - break; - case "ExtFile": - if (!$this->pear_extdir) { - break; - } - $file = trim($data); - $d = "$this->pear_extdir/$this->destdir"; - if (!copy("$this->pkgdir/$file", "$d/$file")) { - print "Error: failed to copy $this->pkgdir/$file to $d\n"; - break; - } - if ($this->debug) print "[debug] installed $d/$file\n"; - break; - case "DocDir": - if (!$this->pear_docdir) { - break; - } - $dir = trim($data); - $d = "$this->pear_docdir/$this->destdir/$dir"; - if (is_file($d)) { - print "Error: wanted to create the directory $d\n"; - print " but it was already a file.\n"; - break; - } - if (is_dir($d)) { - break; - } - if (!mkdir($d, 0755)) { - print "Error: could not mkdir $d\n"; - break; - } - if ($this->debug) print "[debug] created directory $d\n"; - break; - case "DocFile": - if (!$this->pear_docdir) { - break; - } - $file = trim($data); - $d = "$this->pear_docdir/$this->destdir"; - if (!copy("$this->pkgdir/$file", "$d/$file")) { - print "Error: failed to copy $this->pkgdir/$file to $d\n"; - break; - } - if ($this->debug) { - print "[debug] installed $d/$file\n"; - } - break; } } @@ -413,7 +446,9 @@ */ function classesDeclaredBy($file) { $before = get_declared_classes(); + ob_start(); include($file); + ob_end_clean(); $after = get_declared_classes(); // using array_slice to renumber array $diff = array_slice(array_diff($after, $before), 0); @@ -451,14 +486,18 @@ // }}} } -class PEAR_Installer_Error extends PEAR_Error { - // {{{ constructor - - function PEAR_Installer_Error($msg) { - $this->PEAR_Error($msg, 0, PEAR_ERROR_DIE); +function __PEAR_Installer_cleanup() +{ + global $_PEAR_Installer_tempfiles; + if (is_array($_PEAR_Installer_tempfiles)) { + while ($file = array_shift($_PEAR_Installer_tempfiles)) { + if (is_dir($file)) { + system("rm -rf $file"); // XXX FIXME Windows + } else { + unlink($file); + } + } } - - // }}} } ?> Index: php4/pear/PEAR/tests/DB-1.0.phkg +++ php4/pear/PEAR/tests/DB-1.0.phkg í&Y: ì<kSDzùj~ÅDå27ØNDp,@¶© $'×vT+ííñjWÙÿ÷ÛÝóØÙȺç\o%vzzzú==3{°×è4Ûo¾äÓno·>}?Ûí§O¶S?åóMûi·û¤ÛÝÚêÂïv»³õ{üE©OFVÀØ7a8½î®öÿÐç@Èÿ`¯¹Z¬¾Ð(Ï'¹'òÝòï<î<Þz²ýà;ín÷ÖþBô¤ÿçòÿáGûF«ÿ±GÏò<B\7ìôÕ)»äAèøÛn¶Ù_zn>?]ûþê:p.«Îj¬óý÷Oëøïwôï÷uÖdgNxøñê¡ëlá,ôã`ÆÙÜq9Ã?ãé¿ù,b¯YÙm¶»Ì³HRè:3î ¼nÐuVý§±g»ÜfWN´ðfeÍÞYÜ#4ÐÑáþ`8ÔåÙØ¥pYãZSÑr± ¾W~àÚ+Çæ+>ÅÖ;äxÃQ´êµZWWWènZþVwÒî6£÷Qs=¸asvíÇÌvlæùø;@$8D³³Îbf<Õ¸üidGÛ&Xg+['äHÒtÉáË HÙg3ËcK`$Ñ,itKn;VÄÝë쬿~õãháa#çíYïÞqý níùÜ £¦ç?»ózåùÜsDt÷íÁ¬~É:Íí.Ùs«ÓmuÚ¬Ýému{'fÍïWì¾ìv`EÖeëx6_|¹±?b¼skÆ»ð?b'àß3ú#«²³±Ñz¸ÁãXrà´â^Àö}ì[³Ð6±§Ñõ Þ,A0¡]t<øÔcOP¨d¾Ç¥J@£¡¤X6h£gt`?XZï@WcPxrA Eü}[.¢PNPî{½a:æa~¢ZÃÑ`Þ6;¯Vþ*õR¡¶k;&ì`4:7:°ñoóþ¿²]Ý"ØýáølÔ?ð"ØáÉÙäÅÉù𠺱]Û?ú¿Mÿ:UÆã"Øóáøüôôdt6017Áûgû¯Ò³k<-=þÒ?:<È0¢ñ]ÙÜöû§ý½£IÃ÷E°g£óá~?M-¢HnÉðüxo ÄØèÊMÁ nºÑ)ÛÁá/ÿ3dØÐ)ÛÁÞxp4Ø7Int å¶ß+@z N¡Ü$ì 6aå¦`G'§ ÍN¡Ü'ãóýWgiY4:%rCØ£¶PnÃÁà`r|2 ûJÝB¹!±G'û?¥U²[(7Úù ,é|x69NF'¿BFå&]Ú¯Và9ÞEHÁCÍ#HJ °Báv Ѹ&×áäñªµº¶ÐÌÁúå~_±Pà`Wð<H¤àÀßFà©®ÄȾ 1¤§È5ýÚ/Ó&«$Ø&}ôN5ÓC8ù,¼HÌ=1Z@Ø#?@ÂoîKáÀ©GlðÀÚºFäáCVCǬ¢"A**NÛQ¡¦;Æ Øâïù,dc ÎÝàȧ¥Fî5úÀ¸+ løK,fqLh«c'K4¢áÇ -¬ ØÌ_r˲pf¹°1- MIH@¹( °`bf¸ ¤¬,1$øë«ä-幯å£4ÔÎ8eö(m Là©|»d ¼çsȽ æâ(BfÇ+×·ld Sl Xîc4!ü:íúÇñ~ÿ¨./c4¢õä´ÿó9Úw·\cD'ÈOçsà äWÖu6àQ,ôzêxH!A¢"¯. '´]~7å kÈ\)мw8<>9 íãñÙ«Ñ9e°!u#ÆÚÐÌPtòëSãÆyXHë óh¶0WÜlfÎÎGCær`&!bæR!ؤ!Ù>ÓÎ$l¨¯¸ëÖA LÖ6ÀiH_ÐE>âXð÷LXc4¿·0Ã"Ã̵ÒénU ]ø8ó` [îÖV%¯Y®åu!=Mr:Ýb9)Ù#UÝÞÏËÕê#´VnÖs eP¼ÍHÏáf,ï)rf1ï¬9P]ê¸ò éð¹»Ði!'N,?áHMÜÁþùÛ6¨Ý÷Ýx©´ Rä÷Àzðû^¼B ² lPt©m ñêQNF ¨ÎÝ£ÌÄktá-8AV'û]Æ K`Ó°¥0àtÀCxË!uÆu¯åz8#PØK°60U+ÀhÉu{4 ~ H&pà¯Ô=!ùÅÑáééà åÀ¬BaðÄL-»È2¸SBWøÛ/é&n&5±¬ ÎM×®³_Î2-tÚ4T%1Æò,îXDwʼ8®¹=½!F¹V¦°ý ÑFU½Fng8D Qdô©0*Ï?©g ÍcoiI ·Ä +0 E[¥@ ëT#ÚÒÓS+¹ÚuÁ³ªCëR¹\¤8ëxp3^ëio$?ð&ÙdÚëh>( Q¤+ÁÊLÉcL¬È±pù*R!"i0²£-ÖÉËEuf5³<üKWÏÒý!Tá"ÝØËNN ð.|vé¸FV3áX9hSõ \fXX:ýyÈÉrì ßà?0ùåuø+§øp|=þù¦}(4"LXÖÌÉâWæë¹Bl½¦Û>áô'Ø ª¨ñæ0H¤T$jRyEÐæTEС`6¥'¯B%¥â>WÕÖ¥?-*XTiÁÀ ±àÁZßv³-\°è½ØF0¨°X'ôøU¢´4Yò*´ê¬ab.{+$Ï)}e÷©#³|:© +Y$2E`dQ0¾¦C+´ÂßFÇ÷z)ÿãO¥Gìm(Qã{Ïgnl2:×ÖýðYèBïÝ'bDa»è@'ÖóÝF ^?G&ØÍ³ê·Ø\Ãqp89IÁíXæ«20æ½Ð_B#¢öãÆÄ°§4W&°yYÑÁ£:·+xÈ2<N ÂLÈE¶B~0*r7' »Î*%5J¾BOf¥`û`T*B-2 íª³èX\e+%³Y¡ ®9¦¾ïêE6%é& ¡BtDOr² ejÍÞaá;YÚ>xW¬ñjåQé'rÄ~~åרQ`ÂjelCRWEñ×SlÛesSb/¨ÕN8!áxM«7þ e è¿¢3}ÚMRú{ÂìjÐ×°B|Wy»s»!®aÉ_ÐVïólÀÐxf2'bhMg°{-;4¾\ß0NÖ?=TíesheIq±X+çVÕê ±uËÈ:ø¯K[r©!4G¤ÎªúêâW9_ZnÌtQÉSö®zæFÈLQà³³½¨ÚÙBdUXjNH£tÓ.¨¨=Ð`vs# GO tâÏ%tÝ ÕÖä¥ÜÁ<õÒò¬{i"¢9X*ãW ¢øÈ¬yD54ó¬ÙC¶°§.fýER1FYÿw[&c¬ J L>hG«_L 6ÌÕÍÖïoÂÕÃáx0:»9?Åü(kß§GýýAíMø¨ålÖ%EdtÌx$ñQóÝðq#ÓL.ñs©¼ªí*Y$UfQ0½duYUý ù5/8¬Ú(NPH¬+$FÑYVoµ)ò%ôêÍJÍ¢LªTý7,K§mK¹u)àrû.ToÊ0»û2±IEß;ÝT9¨¸4¦ÔHçIÅTÆaÄû+\Q r¯ß¿ð?±þUÄøÔf÷ôX]F4\hôÔ{p"îoÜ»§b!+xv±Jì½óü+I@¥nôÈì)ê }iDÊ0Ý%µÛ'È*væï"`qÑÉ©9Ý%ðWz×55w*]*À¥ã'î(·ý²L³KÂ0Øò<ðÓä¾b¶ãX»ö ó°è9jYä,yqG±Ñë(òtµ¡kéäÓÀæ&¦ìùÉ¢1Ñà¦Z¶£Þ!déa<[0X8¸ =hÿ±¨Gg_²=ôî±Ùl^åü¤mÖª¸+¥i&ûõc/GÚÌA»>'r6^{õ¾ÈÄø,~¹DÉßü¤ÂÍ`,5°nªºüÄÉãUr±X¹ å¡Ó}I³º Ú©G¥ñ\f-\^âÐÄvå/¬Û<e§|Þkø¶,hâ*Fe5ÆbùåµôùxÒE!®i"\3ZÙ%áB¬qqþÌdÄKy°Ë")ð_½&¹ê%}jÓ.äX<ªR=1Í5Õß 3Í`R1+°éÎøç#¦ôúëá?òg¾Ûcûþr{ÎL¤ê=v|¬ÍV¶zÎûôðbÃÏzìü¦jI[ù¯{¨âo¢%©Ñr_-ÇàwK½ö¡M&ÄÕcç¸ÝD«NL\ÿÂÑkîÈáÊìèø-£Ó¤!kh.Ö;`,wû±\9]T[f¥§ÄWUb¨õZ-M©¢æ¹âæ#Å®VIÕçxiªÔBÆh¡úp»óGú¡å:ÏÖÂñºõXõn6/Óåý£ñ %¬ËWþ«ÐtedÊò\²êB=6îÝ®ÄÈÚ𽮨#¥4³.[Ô4+¹%æ|b\¾E±<ߢäX0lÒ²qOWL^åæ÷êëß{o¡þßTêL®,³r_/Ü¥÷¯YaI´Þe0à+×ñ*RbÜÜXk²ø·ÕbDfc¢2Rú¦ ¤¾©Vðoí¾ x*ã ÍJ`FÑKÑÞAÊv-(ÐUSKJn%èĸ :Yã¦Juqi¹üCs$;L[ 7öeÅQóaÓjÁ¬Z?δI¬4>O²Ô8=ÑõÆ*?ÃÏç?"Aw¡Í+ÍÚ6´ÛIÝ2I%®RùüïgÜý½yZ÷h½ñµ'ûËã[ ïT<ëY*7GDX¥¢]JnV»T$1\cªÊä-&)ÚZ Ô2eI9)$¦È^>n|Ô TM<ÙÅØjÄæ&¡ønèõ|U½#Ùöû·ír¶ô~¦$va çÄèâU~£Syeõ0ª²rXªÖCUºS²ªÙ4³hâ¨;ë¯"áe ±¯¨hÇLRõgT¨è#tY+P?'_¾r>/hÇŲm'§}è%û´¶ÄÁàjT\нµ&LëÅëìÞ«ÞAÜÝejÙY³Ù5g#á*P`Á.LÎÇZ<îêæüvYs6Uö?;g ŸQÄè·Ãí¤Ü±©µºøER\TTÔò;^·FèÄÑ¥lPVUÿÒQFÙûoÚ¡"bMKTàÿ=¶¸»ûfº£¬¶Üa÷>Ù¸YdÅ"Éû)aw©¬²½ÞMÒ2y¾Î´É«ÀZp/Gm"ÈGt*©O;ÍÙSBú4ëbiÈ<ý¢3°s<Iiê HrÚ] g?ÍÜ{¤KÛ¾´\S,v¿DûN®T¦»¾²Z¶-ðUr%àtn|Æó°aòCÔÓ»\ùlõSWtèê4ì²bfê¥e7¢v¢/ðT8íÀ©²8¡J¶ËYÈVYÀci0cèöjAùWÕûôÛRtîs*>Ð%à:5é÷âôJ³Dɺ²t;NrÑ丶[ø¸GDʬ+ Ry|¥}·¼AýrÀOnÛ®å@h`ª³ÿ³¬'"³¼Ï\*\ÁÿÕÙí¹<a4)7Bæ IAæ8S1§¡×¾ï¹'æDLjwN*¡ïvüõÙ`ïu§L ɧxFºÞ^Ë3ùÒÿ TÄѱ qÙÉýÅ¡Y¨SO¦ÒÀH8Ø,ñ úpè)çså{¹~|¶ñw¿ÿ ¿ÿñ?ó ßé>y¼ßÙêt¾~ÿåxùËÓâ_à30·ÿåñöã§OÅ÷_¶w·: ßÝênýþË?ñ|ýþË×ï¿|ýþË×ï¿ü|ÿeóײÄW\Z¢¼VF9§wu²A&ªûw¢8wû°ÕÌTĪ*Øb>|ÀJÅÃä0çdy<ÜüP:ðB«<} wÄ GÜB.Êi1¥,ÕNþZá²ø33X}ðx ¡]ÓDdø©=ºß9ßåÌP_ùùIä¦ ;§èýÒzFËh'3IY.XX®ËAá8<d4`r" G»lssÇMÉRW^n5@ý8V¢O (îmbËÒùoâFÿ&( úfYz«MQÀ¦»Fm ôÇMü1a¡^½øW0²bißGu26èLs±JUå¶Ù®¸zBKù5u§ä©Ôõ)³zWܧVImó1µJîek+ìµâöÛÊ[{Ø%½¤ÌqÒ¨ÓåëhÂsËYI«²`-{§$e·À§p¥ø#ðÖcñü3¶ÒwÄvÄ('¢5 øfÍ!"%Ü}xÏæ.èoB|W¤l7ø8áx«8Ò7)|AcIÉ!ußÂG+ÞT8ÍéÊ!K*ÐìQoâþôüWuº+y«¸§ùkº¸o ùt <£b¹ ß7Ò¦2ÎÊfqHOÝïªÉEÑlV+áuþ`xM¶DA îöÂ2× üíàêj8*ka²!®ø[HÙ²ÂQ¸Ã°Nf7Tt:Ò*42¾Z ¶t¨°¥º{bÙ©9 Wr´@_ɬJ³AUó"~Á2cíËJXßhÇ÷æJ!´Å§õ?Iãù:P·¨ '(%êÓ`IÑ §"ïùÚèó¶äNÓý £E«áM\M«]ÂlÀlVä.Î å1JÅðï È/0UDi ÝwJĵn»¸¹ ¦z¬c*ú;~ Ö½Wûú"ÚXN¾!>vàê-c&Þæ+ü`¡ @ƨÔÿÖëEù0ó0ÛïÙE·æBuµ¾]&bòôýmZ©ï BKüXn¾Å 'p¼½+¼rù µ|¡Aé+t¾ªp(8u'N_öÌ0>÷i c°ò*â jrE\eeOjK\u6¼]æfµiâßÒ¹$/½¬JªOØïíõ÷Êb·Á&¡Lht/;±ocÈ Íã;ùíufæ]?}Ý~K²c¿î¼åîgRH¯aèßÔܤÉëD/KÉLNdÅiê YuËÔåÅR Ý5ýëÔ÷5OXZqÈ#BôÊòl·8ã'ÑþºáºÐªR0y ùn×¢r^GU'~Ô{ùÈoÇæ¶¯NGóz¦gþ|OªÏÁáé}¿>ÊèÊèUe:ëA£¾>{îÿ¶÷îkmäÌÞèþ×\E¾Øðà I83|Ã!ÈVå§Ámè7Æíq0¼ëÛ7´¯c«ª$µ¤VÆdîg&@·T:J¥ª_åo[h©R¾*pÔ:f㹺TA)ôþî%ù,!À YËÎF~ÃVÿ)|ÂØfÄß`%xý¶ÚÕS*h¶«;'gÑ.['l) 8(¿æèÌ(]¯´óOÉäW,ZÃ=àNnƪÈrhvlúË zmXs@ ¨g<[°éøalhõZó*±~Z É(Ç&odn¦¬¥¤¯¸¬>6sÆg¶¼>I°µÇ`ejʺßAM>{GXÃ7SÓ`óÓðNHOĺBO OL"EÄ{Á¡O¨;l`¬¢úX7ÜT¢Z±7gcÏý¤¨Éà1ûJÌ{u7]¢ì¨ÿüÇÚ0E6IéH¾KMDâ,Bø$&ÅÚ)ùNjO§+ù1yyTùx=rç'^z⥤ úmõ±Ísö©êeVõ¦¤I@hÈv`WÔ ôssé;Ú»ádÔñIAÈ¥-Å÷$#GVÍ*YK&ô¨ ò°iRãD²î0ôÏ oÙ,ݰst\áÒ´ìÒºØj +ü¼%D#¢XÁ%í Q Û6`«¸ Ç«È4?ÅÌ/cÂ8ñurÜs^`åkÓLí#d#±èg4uGÇ%sEª`j<ßÇgKH'=úõÔDG¿¤àùXúE}Á0ËYÄ>¹0ûäþ}¡×ÞL>öòJg{K_BiÞàà I@îPùo®{µÒ¿ÂFlµg \à1ÿ 0¤¢s`\OÕ³ÃG-Ò},;áhàOªå÷|xù±,Ñ¡IYÊúnmÕ+ù ÚZ]ô1½Ã~>£ÂÀÀ˧OÍñ,½_ôcª\x_ã«<ªÔ{ªïÓ§I¥"¹Ç9 <nöä 0|î¬qÁª]¿ÿùê]:<lbTéÕqYáçw2©djç'ä3ü²>¶¨>ei¡Å$7u¬üý"\õvÔÎ%@\Ëòwh-ü|Ôh©Í\(/"<¶#¨ÂíyüQ#+ö£NQôê.]d2uýÓX1"¼4rïM¶>ó( «"Nò[¨×¡C8÷_ úXNtÿjƦ@í~` ?ô] \fÆTîÃ85F´.,[ @¥«2°f¤åÆ&OÖßi»±àÇØqè»è4U6qNJ˾* j>ðD]óçÈVúñOèmQÛ?ÿ¬9KNóY(ô(aÜØñ²½p±vWþÂ%%nÆ'¦õÁ×wè'=²NFwièÏ?Ù ÕÒþøFÈjjßý»MíbßÃvÈÝeÔÆ¶CH)ØIä>c?ÁÞ)¡v[O©R" Ø«Å_Øåò³øWr%5!Luñìº5 h,H_wV?®³'F¥Ël(û®?´ëo»gñ=ñDÆ´ã SÈÒ=£¡Ìj¸B©(6[aÍVÞ2$yBöOÐhäòÉ\Nº "SÞgoxB AÝL(À¯Â®, ÔÄoX¾épSÏHS-Â{¯¯¼±®^SØ:DHÆ7C®à3tQåÙêÌ·×Bbçç×cFã@3EsêñnܨÆöÙBàòÞ:»8c~ìDz}gìÓ²LoÒ4ïs{îð¤YóþM8, .éiâ ô)hÙ¬+NÏ¥q#±rN¥WAÏïß&I]Æí½PqÓ{®éÂé eÁµÔz±õ³ãì¡y?GéaÀG$b¼GEyºù² sé~öxX)ª§<ö?»qK=R°q7ë7ßL$×àÆ É¸ULå{½Zþ±Úüìh± ËÃ9þL²áW£Xi>ÌÃ[)ÎìòZ+òëN¸'Ê*¥d`¢´ÄÇ7¤hHæyXZÓÉÕOìCÊÞf &¯ûX<ù3aÒOU_É ôWCÛC~ÚQl&I\â;Õ[ `Dé¬ãº<0éãd/аÆqBitBÃ)Èà M0÷$=xüÏqQÜøÂP Æz,¡@e¸c×Ììåþ#o©ÃÔå3QâÝO¯ËJåM(¶F'c 'Ѽ5Ôe,¸,oê¶Â¾'m+XvÒÞv)ÛWËá:ÔegÑdîÖ½QÕMÁÞÒösÀÒ'ýJ©Ap\à&¡Þå\@;}:)¾ØÐB£|~ª·¢ $Ë`';ÂÐCÙ$[XÙ [ÜMجÒk(\n#h6lq^Ð'¼S%_È¢H0XÌÅOòáVhd-ð+-cmÞoAËÆÄ¸4T³«GáJ¢2i\i'$r%×¥,ÉÙP¦¡ÊÈþV· !wJM 1S£s Ø ðÊ0q\öwïµXÒ\û 0gâ4>*ðiïc.©»I®µ62C6.ä"K§86#3¶iùä{Ð7[Úõ¾&£rýömPs^ÚÍN6-öÚ¥ÕÄzËÊ5yMáÉÕ èM<Ö»Ls$&xit]8iæ§Û¶Ác:Uróì©|¢ó*rX2âÃkçIøÉ#íãsôÑN,\6;Q qµQ@äH®d¼¿\ ~0+PDõ¢¢-J(ÁRÕ`ÇÄ2zKÒVã# F¸èóPôñ S°f{¬!JÖ¬9¯bs.µå£TkCµv49òÎÁùè¶¼erëRÆÑ*û¢{Èr% ìÃhK¢d"æ©r3{"hÌU}cÓ¦<×׬ÀrÇ3# f³õöö½ôD¥¾Tdã]é§Ô==~w¸³_¨`åÒÙ;o¢x¬uáFÎå«[ #k@!v~Q ÈøO!é4yæ þúõÇÕÕõW?ÈD-5>1Q[&ºd¯bK$Òu×±U("ã÷êàòç¼9>:pxWTjbùG148ï©ð&A@k4ÿJ>@ômþk}2 °ååeÚè2ë]ǰN¼òðûtu§Ô§"»°R³µ'ÆV¥$nk©¥ZòÄfÿây#¸ºòÑR+ Êæáj®CtÆTÛûÁmXÅ©Áu.ÓrÚ=YÆ Î·Ïiò'AtòV¸AäðWH£óF·TÊhÙ>wZÓNHö î/¦M~Á8\(sɬ ʴݦ·ä÷ß^QÎB®ô´ÔÒ~`j ¦Õ;=ßåª]dás\ªfM ¨(ÀÂ1·8¥çE'`<Xú9¾¢M]L;î +À¾GÑ{®Oý(ƪִî4kæR¿Ùæ}4Z\±WÀ®ÎÙ¯¶và¯ÍUl-Õ8Ç9d¢©a;#+½¦6úàKÓá!½p"Äû$0XË2Ûb#3[¬¸MÙCrqqMçÝÙüÅLO¬~7¶bç¢m;êüBgäA4¯Dc0ÉÉXâï G¦IWy¤÷ѪÍù§ñC÷z@E3)W>-à ßß²ç°"¢f¹Û«"_?`Ñã\c +°øÙ[/]Âxë1¤n¿ïÖ°¸å¢®)îç }{Èñ`gá½^|8èõbèýÙ ëðö¼+ÐNn¡îîaש>ñØ61<÷ñYÖòAë!k¤}|Àú̾ýÞOÿxÿÿÝZ_m þ7 /·7ZkÿÝ\oøßóx üïÿ»Àÿ.ð¿¿üoé¬+Fl àz4¨áî»lu¡¹»O¡]1ÌJèÜü×>h*éfqà]0ÊÜéN~ÚD~¡F¸¯*(rÁ(ØCñÍ.üUÛñS©cÂ&í¾©¬Eç g)-NÄEÂiÀÆ#ägÑKê «Yý¨9ÐÅqdïØ=Ô²8Z21± Ú¬ :GQϼ5¸§aîò3%LDZ¶|!@ËXâØ3e^t,8²ü·êüëdìCnæ<Jx*°4Q`Ø*dÒéÎö! ¨ÇíÓN]&ZËh=O¢-Ñö>û¼ûG·óûÞÉéIê©Ý㣷2ɪ^ÚáÑîkºþëìêºÁfc§Ìµ¦AðäÝÎϧ ¦GIV-IÞìuöweõV²ÖuB'nÿ.¾²æÅv÷v~éÈRm½ñ¿nï¿ëtwÞv»ÇG¿É±nR[ÃÀ¹gÑ1ïРÕücÁ} nF·°&Il Q¢¥mt*<Q0ðòîÉ!òezݤ2A1LÆØ+¾ÚS@·å$øÃnD$ÎcYm¼lÈÆÔ QGóXÝJKïvËW8C%/ûãg>á1ßø»QµOE(íDç(<áþãÈ?Ù±0e±Ónícl Åñ¤Þôv¶®áû¥ýõ¦S nx <fF# ¤G7ÚÇ(¼;²EÞÛ]Ùý[Z¿äÌ»ñÞMñJ¼yÆ»J4|αNðËè&È ôÍ2EÎ:å«c.9b6ÒSÓ´ËOÅ¿g±çÄ|áï¿ê»LÑ¡bÐ,áäqrÒ@Þ *Ý;³æ¨S]im¦ª1D¬O,Îè®(î^÷Ï&3Ò}Æ.k2FB¢hÓÞ¿ÿôø]GcNÀNG2<ƲÆ"ZyÎ8u¾"AèYBrdtzUí 2¸j7©º¯%O!"> :>ù°ÿ$m=©æyºÂq7i×!ø0Y°`Ã-:¿=pHJt¸Soo"6ÀýJÉÁÓètv#º6û9»ä« »Qýi1¸cqÊ,½@i¨Þ¢uÇ6_øÞ#ü?\i«+÷8àµá?ô¸OðFGä´f&Åìz WQVQdßÝÜ¡?>°/ù(nÚC"ǼLv·ÀûAÅí8L÷à®Í¿h©£«K@Ö%¬@/rw»¯Èì5KPª;ïö÷Ù?2O¡ÀöÆÓ>áh7¾F¨å9Ä&ÖÃÇHÆhèÑ£«kZ=GH}¢)°Qæ¹âu<û8ê¾nä Ç0Yñ/+WödÊ£í¶0ÏÄvg)s¢bù]¢ÈÎÙËÈ2Áh6¦ =åêhÛUk»&ì¥qöê^@P;PêN Ù<{!:,Íb}Þõc .çæcD¿×js1xóW[<{lµÅÆ~Qm*aV1ܰ¬¶1.%ÜÜíB\:ð®¹ÛR#'¶ g)'Ê È&áÃ&,Ý*F±qÇvÑò»)æð ÄI ËJE £ôc¤ÕSÛõ0gIé,J¦G!wÒ'PÂÞ=ñPôܱ#3ý4ìyjÎh¯5B¶-íìsBµ¯V'0æg©º¬^¨·àr*q8Ú<!ëtÖ:©ã¶¤_Ð`úd@ÙÑ"Ùr^E#1VGçÜN(5Û×¥^æàv×ìL7Q>^¡D6- ÌààÐQA&ñFBåét¢Á¨ãn#6øc'½p¼LyJ5ÐGùáË<²Æm£¨ Ï:AuCdóJäêÆTÅ$ÆB̶Í0â{^W}c§P5j!BÄj à×ã1l)èøyW"¯ïX6kà4ÃØM×#%>©ý§·Ùº<ØÈÃ9WÈM¸ ZÛÙòTª"ÛÜ7Hã.¦¢?Øzt¸Ü´& EfFi±'¯9kME|K2UHîÈâÏâ9«´ÌúµQÞÄp1ü´¬LÔ¸ÁX++ïÿÇ]úwcéÇîÇæºzÔg:óµ]_½ qýJ(KPM÷O:ǧÎÞáé³ø¿¬"wY^®TAÄ® ¦¸%È&=yâXÌ,nAüÛÒnXüÄ»¦Kðiáíl>K"5/Ñ27 -É$= M<ù-Ñãã¦çÿ;7À´9ärÅt]¿ÂJ¥~4#³Öû]áÓ.âTêü.ÛnGO¹ê÷`Mt ¢Ú»Ã½;»Îö»Ó£îÞ!£yÐ9<uNñZÏ"æ¼=Þ;Ø>þÃù¥ó#\«eTMît&"ĺ2³- Ð4hKàc·Ç#´Þâ)YÞíìwØ@hîÙyCð2ªi÷3I 1"£?@ÔÁóOÎ ¤N°]¨¢ºBlL rª.%÷KJ[p<®ÜÉù%ÿù~Oµû> ú±Õ'Okìý"Т]¸Ã7Ƨ¤D+ÕÚmÎo?w;Ns«Õ*ÙuÆFyÀIc's®Xµ9?ئOëÜ¢U,pJÕjVôüÔ¹VʺÄï§G»G+7~x9`ÂÖ¦xK7[¨íÕ_11P¼POâÝ ^{noÀC,²WgþÔ _þc=ýÐ;;óÿûÿ&ûu=²ÿo6Yú&¸öÿsx ûÿÂþ¿°ÿ/ìÿ¿yûÿ£Ý×;aþÛ꽬ÿ+õEµþGÚSÿbÿ¥D³ÿ¤¯j±_Rmì¡2ùLìM{v¢Ìåbb_a¢è-õ£ÅƾTªð{«b<oykתE}E1¨/©õK²¨/Ê Ò¬5k S§L´ÑSìlîüL ZÍìÔl«jë x̧îá»×Ò\$ûÁllö)QÓ(lwï×ÿîñïm¶-êßwON·1n<&Y%áåÐ÷vÖ÷Øwi1Ï>¯¶R?ïÄúûÝáÉ»·oå4biÀêþÍÑ»C%E++EÓ ³þçÉ2 µòjebsñÇ~eßLë÷æÙ±ó2_yJ /ÝÃmåÅü÷tPIÜÅ[ ä* ë×¢ÛJ³èÎKSø õG3 ãSqW Å`Eûnõ ¬4W çмÀ©L¬zGÔÅË ódP=/CrVÂ`à÷*ð"u3HÚ7Û ñvô&Ý¢taZ²}Iº*Tè;ÇÄe¿ÉÄÚkì¸_DE8@T4¿õõ¦YXÌ1¢"#¨/Ïð ¯Z̹à3oÃjÔ/rreúOà®Ý:t¿/bÓÑBÑCÔ0ÅçÓÆã"Ëå"?I;µ¼DjÖ^QÜ-¢û[ÜcZÝ0öØÓ«$¸îÏÏ+¢êpPÅ ,-ÉáÀÒLÑ),{Z]g¹]npHõBÀÒ ¡dx »hͶޢdçÒ}<ðë¨Õج½ ä?âPÓ àÊâ³@QÈâþwY%÷t-xHß4õ£WÁ<ü ²\ªßszÜC<*:ÕCIAþDho !ïÔèÅÁÀN.ÙëàNøÃ¤ý!®%2Xön"[$ß"Ã;,¤Xª¹©Ð^AQykS!÷<¸ øUkèIì_ÖpÌý&x_¬µÿÔEŬî{;}`FsýÛÚh7Öä©G@ù¡uò4k²Õb9Ïl©YV«rP£ÚD`×ò¸\)×rþÉ5̳ìwÕÖ£ØV3^uæGƼ¶_²cV7«ð"õnõ^¾(OH+6ñ J2¬à§Â À åú"? ñúî!uÑn¢ùjF¶fFeóSÒtÕׯæäá 6ÉÉäS{väñë®RiSR{©Óc_~amQJ11>gZøa7äÜ»L침V¤Aï¦Sýð~ùûkÕåïÐÐ審.ÃS«ÄhEãEäçXßÝÛ° ¸2r ö¿A¿ýÿ×PO¡ ,ÿJ,YàW°.aîò9ÃÍcwH`WËMgþ>_:sCÿ|ñÆvùË\8=¨yJdÿnllÀ$Ëþc£ÝûæêÚúz³ø« ýÇ\Âþ£°ÿ(ì? û¯ÅþãuïcÐËh(AÚ/óͼVtC6ú°È(!nÅ8FúΡcºA©PíqÜóó`J)PòÙàn£j/ÁëÙíy ¢*ÄApÆE%Õ±R·ÍÐoíIé.ÇIHÂÎÊÜçD6ØCÊÙ¿@4ðéÄ¡*zé6$¸`- ¹¸à*$¦¿sZد|ÿ}ÌOüªÁØùì{72ü°(åðÃmqF[äÍo@{9è)ü1]*I+ÔGCËY(¥±ëFcÿÊßBÈÆP'ÉÞð&YvV®[.]`Ú4XâE¹Ô©öÎ.cô@¡ êÓ(jtb( Q81T`p0 X¡P æ¡¥3!@3?ÌF¸øJ.cágãLç¬.XÍBÛ.½[ò3@ q£BÝZÅþÀ½à±Õ¼s¸üiÄaB´*q>Àk²¼PR ÓfÕðÇ4*!¼>EüñB7üÏE¡Öu¹ þ{no ï ôÀ{ )¯MÅÎNdÅöðUz>ìNÐCÑÒ"X ±jGkWÞ+-+ó¥]v®<¶ô0 ÞR ;mxyÍô¡S`çYak UQÙ!ú±±R¨ñyvì&5ò³Eä\ö+å ÷â |ʤl ÒQ²j\«1 ¨ÅJZßÐ~åe|N75gƲ6ÐêÑøÿö(¦|¾%%r3Ô÷/б«-£¤ «ïgw "Ôʸ¯p)ÐB5µ~víÑêìSía×£*/³¦ m` eþ:Ø?¡f[N)ÇÇQ¤¨eGénðþR4ТÀeHÉGUç$ò ÇMù=y1Êh"!ùD`´¸{Q<E4# ÕÕ³,Ó¬¡4ȵ4E³÷Jh$ËåBIQo4U°!®½HDqä]°²OP$#î ¬ØWR4$¶Î|à@$D["Ýð{¥øôÞ!h Wõ®FÛëà¦]ÚÆíÊÖù^O"Ñê"#î÷4,uâáWuÞaÚ2½·Í:ú1éjÎ9§z4§Í¸jêdã_Ê5á UÝeâ0a´`©)Iêèz2\Ln^ {ÅùØâ³OÛqS-l ô)4ì#; Ľb´p¹oÒÅýQaáômyz;r«¬¾ÕúXK^wd×Ú³h¼^ÉÆ3ð9FMª*îÌ5&N¨qñÉ'ËyQL,ù²&Êíb+Y)ÕHw¤¶$ÑgáYçý p{p·ÏRl!«à5³T u>`tТÄ÷z"¿$iþí^_¯ ³¶Pκ@ª^Êáäl¶@Tªzâ÷yØOE7XiJ¯³ÃÛ@˸È3õõåäj &EPÁ5-YùùëãÔGöN9¸ÿ\{BzàÀkK]aL6àkvXÖ ñ¸°¢*FDnía#u d2>&Ú ¼çUåa^ÑI3 8û>¡6JßmdæSÞÊ*XMà$ƪ¥åà;HÐ5ÃØSå½rÈÖ¶Õ!73àûjj×3ÚZåÀR$}¶C2Q]òÀ®äC"´×·ì¨ìÌ "êmt,¦]ì¦ÄÙLBvÒ@ wÈDhì-ER+;õùcöfhó+,Â)t¨]Og!&1 1¨nÜ!®{6ñEfnM¼Â£g:WN^·ûÛöñáÞáO]°ñïîÿÁÕ@dGM÷3¡S=óÎ]V!¥oØÉJÐÊÙóÆ¥þ~púÊ«`xÁAÉâÎn 5bfHfº-»è&¶ðmÀ ¥¿aF5ïSãë²Tý&k/Bè34/#*@¸bb¥j)ad"%® c§e\ Í¿xëâ"µ_5.DqªqA«Vãs,âj'Ga;KN×ÅÛVÜ©-;9ïÚx ÇIìFSìWRÅ$ø¦ÿpJ*¾ãÊ@¡Ì ºRÜé>Á#¡ pA¤'åïÌÆDü5~¶V*ÝçDZÆ]ãþê6|ÐÁÞ¶ >:ÿ¶JX*ÍVÄ£:#Æ vcjè;ÀQ¹mæ\B4ÑlÉ'%©(ET ¬ ¢²ú@Å¥yúTï2ÞQÅ5Z|訴~ÜÕÖ/BZ¢ú¿L¡UTÕSWu/;&GûN~a})ìKQ%p¥4ÞfêÁKzØÄ®øI¦ñS´f\å³;æñQ0Yv*ì÷HÌÇÊ!WÞ½E|9v8'Sø¶«ììö ðSw81HBJ<rcqfm9Q¿'¾ «Éçcñº9ò¶R*Áµ¯Ð¸6bÿ×ZbGÛÆWm#Àv¦4ì?FÿsµÙäöëíÆúêÚ:Æÿ\köóx ûÂþ£°ÿø¦ì?¯}çg|ro\çù ¸öÃWçþä¶ý/?dïXÿ5²[|ñöwÆÿx±÷@A@qsµÀ]r_@*æË*S¯¯"Dl|#}ð/榾ÖõhénUï±rßȤQ¥PKÄ]ÖÕ9 y®ó ¡ú÷¸»öÝîÈ.>ÇÛ s9 J ºrLú*1(%l?¶Ðù)¨ßÐÐåE)ªfG¡Pg^B|±¬§£SȼZr!U¨¥ÜÍ.ªãð$1ÆywtlþÒ §¼fä&ç#P*üCT\2Ò>qÁrðŤ¥ãP´ZBþNK7!mLÃþÖë>gZسéô5{mµÈOQölLÑ HÁþÐ%´©TUÆ1ëë¡ÿW¥ Ô)±é- Zì2%ÜâÊÔp/áIo0!ñf1Hý'LH¹ÈßbR (Wô p,xB bGVÚ5Ån2`lÑlÒAéD½áUæùáW1Ûá÷ )"mÕNC ªÕ%¥:Ò©Ë~ÈW{PNAE%«Ï ;Jâü5Ä(àñB°>hU£¯]åF>IíéB¯FÇ4ä[I-ü{³°ZPì}mCÑË|¸«JxDhëèÎ1ìªL,ÁR`âdb¥¨«ZELI^ÏxI n¤¢}t8a24KÕ%dùûA³(Tò´Ä¥V^9Ïàú½êM®ÙL°¡(=¬04l¯ÜbùUÙµ¡o7â8ß%åþ>AH,z¶¶aTXOfAÛ¯OëÎöþiç¸î¼îü´wXwvö@¸³ÿî_ïìÂÏ·Ä0ø)L[ýícüÀ÷ÙOr¡ît~»¿¤ñ^=Fã§ãíCFÌëÎþ+%Þ?ÚÞ w~©;G¿2:G§{oþ¨;ÇÎiÌqç×£_Xªã£ýý×ÛzLüDÃJøÞü|ô[À»CQ4]WÕ_·wÞ½;ÐÒqnaLÄá!ö¦ïsCÕÎÑÐ ªÄU0ùk¢ÃÉ·ëÇP± 9©>}û¬ã×;ÇÊ aÛ}] ¹ö,ÔBfc<bKb4YÑv| 115= #.ö<ª&²k¯:¹~D¦8? %µR+éT ÅëXDjJé[©u¶Í¡I `¸Üû´q.]JrG#(,© 1XD2ÚõÍQ÷'ÜcwÉê¾wóþ ú¦ &ÞU=E+kíJ6x*+ÕS²JÓ"{}XþϱGóåï?TÿA²ô÷µÅ¢*Ã;ÅcTVÌRÍZ&4l\Ï$GBÿöÆY æÏÈ; üMá1t¿ßZÇ f¢Çiº6?ÏÀR7NZ¢Ù;éÍ^g×Z9(¼ÉëA5d{>ûwè¹cçCÙ GÀ!«PÁæ/Ø48ÆdÕ¸H¿ÙE¨Ðç±Góäõü&ðQ1ºôJ©2D©vÉQ]±;%³Óåòæ¦\YæúTzúeöØQ!I}a¢ÝhkÝ[GT âöAÆIíÁÀëâ§yàØ!Í|oheëIK2æ MB÷äË¡ÓË=/¶¤õdBA°¨g×Z@÷ 2Yc[*[wÞþ¤õ°5èµaSOQ{e£º>å¨QñÆVm¤µkõZ(ÉÖ-ÄÒ 04s˾tîæ³ÙyiE7h·g;ØEåJ!×ðU43 ¦97DÎäBz÷ u6ó!Bt5ß¹ÿUPÔÝ ,$«MÁIòsâÃqþ=8ç+ßëDGZ ·t²hH£¬ÁǦà4«QyÍ0ÐGi ÓºÔO`æ£zÀ&Ècٱͼ0ù5ÚL06[ë¤aØ ûÍF³¡;ØÐйÂð×ã<ämôùbDáHâ=¶\êÃñõ» ¬)To~ØÏ +5ALVfT®¼Dk-¡¬Ä[îéNôYFr°©ÉLÀ´41fÃ`Ci%Ú÷;éSÙ]µÅï¡ä ñHï¿Û6O{Ñ#ö'w#çôí³3/j,©äîK?¨Øø¨tØy(7kÒ°b¹µU5ªïú2êäT£¹¥+<ñÄ6"¦QXºÂ¥]eMq·5Mß#BÀ¡®Çc`äÑFtï cÂKUF4vWfÞ}<8á¼¢Eb ¿xo½¥/¡¼áuÈíc¼4 ¸= §Ú²ãüÆ^H"²µuÒ²ÿ¼+K¸4<EÌy(M%ÃÑÀT+ï?<ùðò£-¼0%Õùí¢ÕËáñÀÊC+Ô¹¸ ¦Ü&°QàØR§÷TݧO?Ò1áíöñöA÷dg{ûø5c/ìÉ ;z»ý_ï:¹³éÜìû1÷iÂ?"Þ°gß¿Õ1üIJ~òn³ZwöOäÄÏвӱ¥a¿bójy¯¯ß²2üjì®·ì9OsËn¸X-rÇ\«É"còîÀ¸Oçù;´ù½ºBËz».<ôÔ~IÛØCL/¼cÿÏ"jt(>ú%1úAK7á¢`ªYwÚ)ðÏ ÓAwK{ 5tgÚ)7nzÜp`C¤;/Q¶t6MAúÎxçù0¥áê%nö&&¦£ß2iÖ͹éN!)¼¿&ärg«6úsÙ4^õÉèU?16^]ÛL8é1Jìà¦\Ú ¤ÌxÖ³òÃYܽ]ã@ÜLÀëjìd8{䪮³ïܳ`<ùBzOpoC-qüFBñYý¾ño\&ëXÖºÜ/I²bî"I¡@*¢·2iÔª)ÎG,wZãÅ4a^eÐü³åtÅVø^/Mg VâZyYXkÈ¿yä¸>;.lÝë+ð~ZÐ×ÔupsÐ+wÓ«³6°Kóö¼+î]j4®Ïþ¹|KG?n°Èjñrb ®¢jF>ÔEeK :¤æuÐÿJÁbÈ4Ü*@#²BÐHÉZתDlþ p·À"Meåýÿ¸Kÿn,ýØý&V.Hö¨Î¯G¬UºtßbGÆ×;¿þº½_,þ/«Ìß]VN¥V¶\úDmypb1$ãßãp¸.?fÙ`µBlÆ%òX»hOøÈUm=¦¶ÇÖ[%àI©Ä£ëÞòI9F8nÓæ sËÑÄ¡[ 98v4G\+& °cÏSy=5¿o|Ì¥ôq²ÈTñµj2»² ¹=êÇ+32Å´¤é5Ó5ï$|©#;+±£éáNÇj9K·Ñ£®Þ 8÷KêfÂóìd4½KÇä2ÃdÍüxgfAk²5c¸æYS<³{"ü«ðqð_Íõÿ³Ñn¬6ÿ¥]à¿Ìã)ð_ üÿåÂ9xã?³z¡ó<ä/DS=fËâ^oÓ»Oý³Ó\n®ã2\i¶V§ÑÞlþ°¹¶î0ìtþ9÷F{9ðÏÇAô'èxâÙò²à¾äÅ]ÁÚ'â®<À.ÉÞñi¤#$$7â it)÷>_ U\ Ð!U6Ø¡ÀQÊr 3ÕÈ j¨ô*P{8Æà.Îø½Í©`+hú([Ö4Ë"ìÔkÁ1+ùº®º½3k¦:UÓ;LUìÓ¸êó9äo%ì#.`[Ä9ªú§ÆbÉÿrë®ôNÝrÐc~ÝIý¦®}Á§ùÚl¥ÙÇòÆêkºE|i&n/4`{õ¼~-*Å }:/Ù̧$ç,'èºãû`<¾ñscÔL/ !ÏÞ·Ñö3_5x¢öÔFÌÔ],u÷ÞÌ÷]ä1Ûæ©-£Æ¤X#»zনÁÓàvÏêQâ¿ß"úÑ(3ô¿ð©ÿe?ýï<Bÿ[èýo¡ÿ}lýo´û¸õÀ à,ï*_ªð4XÛ¥¸¨.ehK9Ô¿Ø%-ø2¶&~XÖR4ý¢|TÂñ¯q}p©T²©ñu\û¯¾¥EFIîY^\2ÂK%0«O\÷[R¢ojßmÊÞs)åVð¢16àMNn&VF&[ÅJC¬ëXù»HÉÊ)9[Rü2E)ÙýG§êAmúWû(' M9X2é$O"g´¦4DEUõ ÉåP¥<êÄÙé©HÈ[J9R"¦ÏY>eï§ÄüÙAe¤séGFÅ1*ÍBO8 "ó¥+¶.[ÇôR¯M¥Ä:Dÿ¬käx/×`kJ»Np0¥Ùiô¢¯Q±6§®&eÜ4=ÉÙtÌRíÜz·RÿÙõmÊö[ÇÑûÄßQù,uZRBS&á*´ä¾S@JYÚ5Ü I¯ÆûŪX#-TjS*ÒâÆß/ ¶aß ª}'xgÆì;ѰW ϯáQí?Èü3Óþ³½ºfèÿBÿ7§Ðÿú¿BÿWèÿ[ÿw¥¶Üüsè/ÙCýå7ùüâ->g`ðmïY{þCÌ=¿B³Î¸UgaÔ9+£Î·é|dÛÍéæÃ[n_}4°´Û÷Õ©AȯÒV³°Él*g0d1R3·Îü¬0#Ìi0ÀóÁm-gnjùETþ£Hÿë?ùgþ·Õhúßúß9< þ·ÐÿúßBÿûØú__7ÿ\}`ð|¾§¨h :¥'ô*~Ôp"Ë¥R!ÒöjÖþ½7ý4ÛÍØÇlÓÍÈD3¯å&|7³ì2]»]ænYæNx'bô g-+©ÊXö=EÃÜ¥rÕhÙ©l®TØ»pS§aKÓbÔú1{ÑÍmI±(Í©°£¤ª¤Z^"5s&&OaàP±Ø|ÆÃİåÒ¬5§ÉªÃbõ1Q}Õ5Ú¬dº-ª¨5ºy,&(ºx¢«(pzK×/Õ5§N®Y¼âvPóCÊ åiÝðPÝ(£bzí÷²tý²ÍXówõÔÌþFEg¾î¾µ«Õ5Æðò·"FÒÎöüÈäõO©JAFÐÊjÔpѨ2ö 63äé21á3(ñû*÷ký#ä^§t8&3Û'ªºõPm¹¾¼íƶ¤vaa6á=¬FbÙ3û@'##@,âñ£K¡ ¨*ãR ß,F9Ûì±bÚ_À²mXXNôý%/_©9mW¾Î¦*2CëîBoþM<þ?8÷xûïÖÚzõÿÕÕµÕ&`7ëëk þO¡ÿ/ôÿ þÿÒÿÿ_÷Êýeç-èÿk0zÉáõ_ËLJQþGmÉów w¿8»çlVü Tì4XÒ÷TÒP7l:-/³±;ÚÙãÂ<j_w4òÜqÓCªhnÙú^@l£¡sÁf*{tdLí:Ì!GÒfÍÃoèýs~5%xn&ùU0Æ;ëÐX¨âj¤K÷3NÐ^@ë¿ïy=¬ñç°PÚR»r_|¤ð°À ·¨%y²»GÁS*?_r# QÝÜ Ðî;ß²@æ¤KóÛÀc(,¢- 3ì^¹#'ság@<ÆRÄw0×\9§ÝmFéà¢?÷P½y1¿ÝrZª$N5ô<ízbÿÕ4ÊC5AãÝA-'!#9)Q1?Ø¢(DõSB¦Ò¹XiEêWÁ2¯|Å0#³¹´O ×Vp×ç>±à·ûÁE0Ä«$öý!o«#ü!JȾ¯Áë#å1n~¦ºäâÊPGófGúôAao\ êD,yÖ¹Np=ÁE%±í,æ"ÂP§Çï:Ú"z³½ÒÝrDÙ6VPÚmùQ¿OpÑÄóhb¬- Z¬ìͤÅ1 wFaúT¢÷q~ÇI3* ÿ²ò(L3] R@©GgæaÂ]C3SPw¬{B\fcPæ~ïKøÚìïüøzt;Rý ÷Ü{BõËïlØ«îÎÑÁÁÞi÷è°{òng§sr"©*<¸¬ÑY5Ï4íÒBÏV¤Æýâo3@vÄò|/Ù;eMÂ:M3¾ÚøôQO´8µÑÅ×%#r߸è3:güåõ¬ëu%Ï'.ÔÃwûûª8å£>` À£b.ÃÔËZ'áNð¸C\6A`Q¼]Â¥)®Ìó~;î¾;>ìB¨/ö^Ä÷Õä³ÞéêûAVaÈëyáMò=qRÒz`gDvþäi6!\ªXÎäû,FZ{}67Ù±ÆçúÎU,RJP'ÐfM 2Q¡#@®Uv<áî}üÕ,hË.A>ÿÒ©â´YY®ÝçZ?ÁJ.öçªuØ©Pi » lºClRðæM¹6(¤y¤Ï1Í4B°(n4¸÷ÆãeDNDuÿ±`\9 "q £®ËõçÁàújRðuÞã¬w`1d/XÊ Ïæ°fÚ}°Q;4ÒÌÌâÃ~<B>z1çíýIáèUvKªw>ùë*«;d2 ÁùùµØ:E±cX2$Ï$x!!ìñPx?ÕA¼ºVn_â¡íá³bϵ«ÑRdÄöúzF./bþ0¸òP9*Ø0À»øÙ·t ÚyIH½×ä(âë-©-NÆÍt?Åäøò}J&-2¢bý%Ç=æ5êh¾¥w¡<ðÂqñ d^v´ãÖ1Ð.äÂì¥Æúõ7öFuHîØËë¼qà'jжQ¹ñ]ã¤êZíådË$ þ¤ZyÿáÉ+Úñ9[d²×& ª>&qØÏçQ{à婽|úMȺ `üÛûE_(ÐJç ¼¬lâ_¼¤÷TüÓ§d°Ô}»}¼}Ð=ÙÙÞß>~F ÏÆûéBâIGo·ÿë]'Fâoq2<óAkÏzÆÿ·®»ªæ,¡®ÜÒfÊ¡µuqèÝÐ(.ÃÙ¹ÖãåMH^r_F+ètÌo×Ï4¬xÞMUèé[0%£VÒ©&SÓ%°X±Éu! ³ÑRV¢\ÊñMï:\û:±ëuPFdte: áø-ÖëÐs ÂDyQBºúj¨m¡²2º to¨Æº³ ià^S Óü'ÃÖ)#ø7£ÄÖ×\d¤VûN¾Nðår«ñlÑ)«Ñ¸+P(Gð'¬µEñdV*0JD 1j"ûºe0YR.úÁØ£$VwÊcrREÀuW ^Ð)g$(n.ÁuÝÙ52ÞÕugµñã:kÓwº\«6²3>¬:ý+[ñc ¯sz}{è^±æüjyѯ+Õ^jÊ.LÉW§Öbé÷ÒJ ¥3ä|Km[ýôÅáÌêÚ"þÂËR¢ÑÆJÏÉ ¥ºbâÕ97%APã^dd 5Ñ-`àDæ¨&'È4lÝÅ ¿Õ°a,Q3ù`tùë~ÓÞö&Õ)[àÙ¿²4o5-üNñíÝÔïy{Bèª}qÌ^:háà²_X°zp¬Ï×=q?³zX{è8ÑøáûÈí÷ñA:£[hQ«CdpÎn£®uãý¾ñÚ¹u»C8au¹Ñ7â»$ÞÓØë±µ©7HÓ¿ÌËÙþºT·àz8Ã&«9Ó9ePÅÜ¿b¹&3LS2¤ZO[evc½Ìä8å¥óæøèÀé]»2Hvd¥ù"0)ç¢ËXíùeµ²ò?Âï)ó¦'O4ïï´<B(ãC¨æa'ÉãAY©QÈrDHì½?¯w2³½Ê®~`ü]'³×]&àÜs¯Z®$SEr]ÿv÷+q£{öN3ºÓ²Ñ={F÷coÙ/ýa0öf]Fºý7<`ÿÝ\cïÖ7Ðþ»ÕnøßsyN·:)ü<¾Ý¯ÿÓíÓw'TFÆúo6Zÿ´±¾±Þ\[ôÅúdzûÚéýÏL6ãF§Û·Çþ_'·WgÁ |Çò_egÉA;Póx½ºsv=AXM¼ÀX²5Y0ô@¬CËLzHKÆx;JxAÖdB¥\ÛÑ¿[i!PËhfæ`.Ã×%ø:¢º¸~ËEß,,tÜóK'ÄÝÒõhäA9ÛCWl¸ÜáÜAæåèfAùÞtØB;îHÉ@dÄ?wð'ýruK?Qc?{gçðstAï)jÌb{Å þðó4ëý¿|RIJ{Ñ)]¡5ÌÈ34~Ê÷Ê]JBZ3Ï_ ï\g·Â~JZÏø)Èü.Þ³¾÷:d³æÏNÂû¨^êÑæ¾mDÃ8ÈÝ}µ³µ\ógRY¬×`;ßݼ]¹£,txø7óç©ñ· ÁÇdé~øþÏÝÂÿºÌ¾ýÙ ÿÏõV«Ýn!þc³Uà?Îåyþ¹p.Ü*³¹PvØIôù[î'xz;ò¶ÊgþÐß_,8ÏAwþb÷õóü ½8¹¾ºb_H׫í3vF&áì»·ÞøùHøþí¼1ûËyNò¾;_0ò/øLüçäÿCÅík÷Ó'o(KvwÀ£îW}7,ç+ô³¢ôüØCç=Ìö+µökìóñ|`Mð^´æü÷Ãó|u ØæþâßnVî¾=w 2ÎÊXf5ÄäP¨Üçoü·ï*Ê¿`ô}êøÄ:<¯à"ô´JqËR`d+ÙþUÂìY¾,ÖO)ßn¿ rÛ'&Ð$|B'©y·PG ü¥wèÙü /åø} \äýá¹AÞVÚàåLÏݧɡùàÂ|¥d39 ¤èÍ¡wÖÅ^aäOÞʾïÿÝmþèèÔ9sà¤]áÚø|¦,9LU;ÞN>üäüþ45ºú4cÌthOÙµ)Ó¯N~}ÊôS¦ÿaÊô?N¾ÙȸÞsO3%uNQHwôyçHw>ôyçHwþôyçHwþPú©$e~§b^¢yç5OoÎkú ç+\F,pþÁ?ÿlï²ÿ;Ç ÎºÿioÐù¯½ÞXk´Ö ÿgYàÿÌåNI!j+A,r`¸ +¤!7ºÒ$`¡³ä¿àÛè<ÁÑÑÍy®Õ^,Ý&f NüCh9áãkßùÙÜ×y>®ýðÕ¹?¹í_ÿËٻ塷ü¯Ñí>9¹L:?ðb»ó¿¯ÿÓÎÉé¬}x²îíXÿ«Íâ5Öõ?wØñ½qtïãd?¯%gý¿Ãþÿ ýßaÿ²ÿwÙÿ'4,Ù{ø}ÐÁó ®AìØñb üãÿCçç`< ARêþ®üþ¯³´pê_9ÿíºV/'rd½uÇ|³bw!öÖ½8?¹ãpãû6s×úÞ îl÷Ü«{×,ü·ï¿Â ?¨Ä8ÉÿW#ö¯«Ëö+ßO ¹<ÄÔZ2b¿xYßÿìÇþ§Pwh¦ºkèO~2²f;×ç|<<»>¿L%>²ØÂÁÞÉÉÞáOçÓ µßsÓáÔ~_X »Mo8ý}óã¦s´ûzǹÆ;Ó½×Lh[ã7òðýN}T;þ76@ÆO´ÿjÈûæzöÿæzãÿqÖ¨>ÚóÍïÿÊø6kæeL3þíÖ:ÚÿµñËcE±42²Îÿ-óVsm}c£òÿêêZqÿ;ð5äÇ2]D-@¨îÞ(`·Ê8G6WVdÐv;àäÖâä ɽYniéÝó½jYYNy,½¸ð&^2A©ZcTþ.ÇçùXÖ¿¸=YYëuU¬ÿµF£ÍÞ7ÛkÕbýÏãYZ#Å;0¾îÒÒKõKK'¿ì½Ý{ÃR «p8«pÊÑEù,-½ÙÛït2²èËÄ$üPÆáQYÄhÞÂåÈu|òÆdeà1\dGU!'È ae;¿¿íì@ÃcÅ-Äò}ÅüȺþ[s]ÿÍÖêÿæÚÚF³Ië¿°ÿË[ÿj>jgl%®{l?WX@- b ̯ܢ !Þ//7ðU_µP3ÐW`: Õéy}üñøÏ ÓtZN[O h¹RÉ`Üó j!3!HÉd®sæ°¿2éåÐÈɹµB(¯ åNnu®ÆH\vkl§hN¼¬ö<ö2ùjÿVõÊÈâÿM<ÿ«þ«m¶üÿÂÃýѨD¼2GÕBoÖïÑôö øÉ??Aàö×íÃ] L|x²ÀÖ:8.Uø,äpG@¯Ôp êG1ÎÇ;ñVzã`Uÿì¼OúùPÈ¡Xu@ò;Ù.ÔÜëñ3n˽Ká$Ãk°l®¾ýùm÷è¤î4êN»påßöË h[^îeζaî˯zNÈkBÍ*aØÙ@ø+LØGry§ðï41Ò%ÅôDüø»½³*uVÝÉÈ[Ôÿñ ÿ+RÙlÊÈ:ÿ¯Îäÿ5àû«¨ÿkòÿ\âÿI§õ:cÞUz?»ÃÞ @Þv¶y`TBz=ãI)Ìiy÷øès ÑR8Jrar§Ç{?ýÔ96éíw¶O;:E§ê:{§¼Î¤Ì_·w~Þ>®®6ju&rv~?;=gå«Mz{'ãSÈ~$Éýº½ÿ®sR]mÕÊ«V ý. à [j6ZÍJ-gd}ÓzþoÏWÿ×n´qý·ÛíÊìüß(俹<ýêSüx Ã)%® Ý ÿèǺþ׿»þ[ë\ÿ¿Ñh¯5Û¸þÛÅúË×ÿIç±ëþåkXÞªZÙ\Û»¯ÜM7áùòw«¹p¶UX'Íî±®ÿÕ9¯ÿÜÿ`'úÿÿi.eÿ8 ·÷+n´ñ}¿¹ÐZh/¬<`&uý¯Ïwý¯5éüÏ6ÿõÆ:ÉÿF±þçñXÖ¿óx|@qzóprÙ¬³ZðO+{øZàyã_-í¯vôÝ·¹°ÑÛhü~Ó¿ú÷ ûï`øý\&¶, *äe0èyc¼Ø=w|¬ëcÎö?¹þ7VÛíÂþgeý«x[ó]ûG&¤' ½i¸qoM`N-ê £@m(õo^°®ÿæºþ[²ÿY]Ûh¯ýÏjaÿ;Dzþ5,ºGd 6}ÕÕ¦¾Yw*¨Ï§ß×ò¶´¼ÈTúÕòÿé9n!)z"cuÎZtìq³8¨ý=W+71ÂtÇð.#|ÚÑÈ:¿ýÜ9î8gI[`-§ÇÊx¹Ëc_gµ/¥9èqݯ ºÊÿ k¬7Vid~áà«e½üøZjUwÊ£`ÌV ?ð'·_\gqm¹,4´I¾ÐÒê"¿Z«6òÆý`|åB$Q#£2êÚ·¾{ßÿ±îÿ?Îùþ¯µ!îÿWÙ?´ÿçÿ¹<vý_ÊÖ?«; uçׯ\¼ô.këì·rQp=ü4nxäÅ/ä}lë£>ͬLûÏÕU\ÿëíÆêF³UèÿæøÄïÿ4håÇXÿ@glùoA57 Ñ8ø|òd¬ îáÑÉ»Ñ@I2I)¶÷;Û»t;¿ïh4ÜÄ¢»¥ØéáÖbçèðäôиÒRíîýúß㣴${LðÜÛí¾;xÝ9ήó½Îþ®µÎ}ßôÒüqxºý»WUÞÌø~4þp³/czüVc}£ðÿÇÿ»ÿfÊÿk~ÿÏdU¼ÿkûÿ\¹ÿ#âé?{¥%uOÿxÛ~ݺ¿WÞ¢>÷Bpv(OÎGO¥ÃÓf»ÙVÃñ ×è@dqRA,óßVX+eþyäÅ×ãÁ_ÿ3wÿÊáÿÛÖÿ:ÿWÙA Xÿóxîâÿ }_ûáÐàÍ3PËá¦jñ¼ÊÉKK u$t8--B÷B{è]LF²dc«%£¥} ¿4¨´tK¢ëQ§îàöå9L|eÆÿ õ{æeÜÿüùÿáËø?*þO³Eú¿F»Øÿçñ¨ú?þÿçÛÅÿѣ̬iðÖ7VýÿØú/ð üÿçy¬üÿü¿W!(ø6Û« ýç\üWøCuý?ÿ§²þ× ÿÇ\Ëú/ü?¿¡Çºþ ÿa½ÝXoýOÿi.OüüWà?|Kuý?ÿ·¶ÿøsy,ûáÿýúëÑgVFæýO˲þû¹<õÿOðÿÎïï&ÊÃXZè1rªîV ¼¸ò?ußõ±®ÿùú7ó¯ÿÕæj!ÿÏñ±¬ÿÂÿ»ðÿþrý¿Ótçäv¬ oc'°ðÿGÅÿnlþw«àÿsy üïÿÛXÿsÿ:_ÿV×VÁ¨Éqÿ;ç.öÿ¤'þ ï±³3ùGr9lþµbÓâ¿.¢à/`пö÷Î ·¶Ô¬ ½}ñ$>þ?÷øÏÍæz$ÿ!þËêj»ÐÿÏå:þ3) lñÞñ|¬ú¿ÇÄZ%ü×f!ÿÍå±ÛÿøOßÊc[ÿóÆjµ#ü'Ô÷s{âö?þÓ?ÿI-¢Ç¾x?»uþí)À¡T2þð³;ð{ãÂgÞ¸ÀúÊÿ÷κ}÷|ogºdá79þãÿÍõ8ÿ57 ýÿ\ ÿonòÁOºôE]¸¹åÄZM¸Û¢²Ð²8++ÎÒ÷KÎÎÓ§ðs oïÃ'2ðî;Ðéõ6I ¨Ão¿¹ã!lFIçÔ Å3÷ü7ì ;»·UTo}Ðò Ú¸|Ú5ù»úÇòGpîÿ þ;)çøá-^ þؽIUÖ½º¹ôS°Í¢ºè×EPÉÕXÕ<÷üRIiø+9L¾ép ¢Åàì_üΧJôè3 |óCì®*$GÂ%5Ph$áâ:xaè^xÕÚ2ÙË ¿ozJ6r òMÉî5´\/ÐýSæÐÒÒÛ£ú%æ¨C±éºÕð7U`5·#oÿ®³/´ Ðß5I OËO/dvøSɪã¹Íìf~ÀmÀAàÖ p«y¥å§2;ü©ä?Ì F¥eÆQfö§üc+ÊMç:5;#óãß ü;"@Ó]£ ^IôBÄ-ßcs¸âI{ÌýÍãzáp@Öùoúßæ{·¾þ«íµÿk.¶ÿãàïþóþõ1@0;BOé+8Pëz¹î¨M¥´bScÛ±«i1Á¥øXp6è%í²<þiì]o>.WlÆÓÀ_p@£¥PØCVVð\¾Ã%z!X¥ìÁæ;~eUYfå{óóºàãuvlçÁ IÁ3¿.®Oëâr¶..gïWòÊFÇ.ÐöÏng´!ãßô§Õ}1º5ÁLQ¯®¬SW.à¶ÿÔEßÕ±]Ø&ª ö^uY]P«×YwÖYwþ÷8ÿ£¸8_ü×µµ5Òÿ6Ûëÿq}½ÐÿÏåQõÈoW"vûÏÛæÝóû}oì±WQÔ·PpñE«Þ,¢Z{ÆÛ°èY<ñôX.OýrôË2¡æì®ù¸ÆíÎÙ¹Ú1~>`Sô¬ÈA}{CMÑ»"?üº}|¸wøSԺݣÃý?Ò©dM«ôÉ#:©î(o÷Oï9ZÁÈ<2«ºlûìý§Ò)EÕN÷ÝIÔ½§{;Ú}ÉðQ¹7¾rëxÁÂ{±ëm:W¤Ù*'\+1×ÖR'ÃÖØ\ÎÀûì¶ÁÄgÌh4öúþ_[å²ÎÃüêÄo=ïìúýò1£X ³ÌÌa Øxð©oÕ;QjëÁK5¯gd{Û3*óJ½ðßÄKÑ×£Òü5ò5v>Û ^0ÜÜ9Ápp«4ys,kH2M¸û ·Ú>?¿`ÿ¼8Ä|ÏWÎ^l&]»9þÐa)õXiÁvà=xßj¬Ã+$oïy ÂU>Ò³&ûrùeø¬H?¶¬o{¬ç¿ùâ¶[qÿ×l¬þçF»°ÿË£ÿ ï¶ï_\ÁFOîKpgñÆâ$¨Yx$Â0gñ£`Ü¡ºÚøq¦êè®ná×꼫ÒïÀèîu¸nØJ¼ú{á| ¨õW·ôÈ$Q`òÍÍü%.~+§Â½ë¹H3ÈËúÁÉehìú¡ÇO|+U)léèíyÄÏ¢"Ñ6VJP¼%GµlÖðÂO.']æÎöþþëí_êbâåì ߸M«H,ñýªD×Ò0êõ£ûµ\µ3ÆëfXNÉ9.Xçá%suF¥ZfÜ>_2Dë¤bgN1&Þ{YSFïHHü²Å®7c&Å¥×>}Je×]/5w#{ü¶MþÓA·gVFü·Úâþk͵u&û¡ü·Qà¿Ïåá¢\öN¶»×±hà×IJ'róÊBÊX*,1˳ôÉ7U¹AÊ\§Ì÷Òî'ï6¬B¶Z 7óýÎÕ£]¼Fy=÷XTûWÖ¯\o Õß}Ý}Ó9Ýùùàh·Ó=:Þíwvk_J§Ç ësµbûäähçjCûùµÓf>d üóÉn [ÿR{hðàã5&}!1µxG=û ;ZÆã´Ñú»ÔÂxÎ&ÿ+³,#Ëþ³½ÞøßàøËÞ´7 ÿÿ¹<\þvØç:_r%X ½êâUxÜ"æCðLÕÞBªräÀñRàmÝYjÖï¶P(t¾j¬6Í¥ ïi$ ¹)r!,û:#z\?;ÕEl<sØÏçÎü|úTÔ×VüNBß-úh;±²²kÒ*üw^¬@µeµ<óËM͹Aü¨F#åit½ÑÅ&b¢VhßÞÀõ¸Æÿ;³*#3þÅ øß«ëhÿßjñ_æòL©ÿѼ(*Õa{W@!í}9ÿáíϲ,ùo£É×?þ¸þ·Ý,Öÿ\;¬ÿ¦d <RD¦ô²&VÞ¼ |ðËz¿?ý\¥PRSní±#èü<¹õÁwËxW£¡{U-¯°wLN)yö[ð*.üpâ»áåõ¤Ü»B®Å+¬sÄõ7¬ ʺðôoÆþqÄþ½¡ÈJhCÁBûç ÄÒ½Pvh¼µ)n7Zµ¢¥¹nf¡ÉPÂ+'ÓmEtëN¾5ù¶JÂmTê¢ÃÒKj%ñO"¼Çtº~)1o9räÌ= n2ÁóÌYͪ;¤ÇßÊÉKLªÈ1ÎÜ#z×C¶0?ɹ§ûì£æù_Ä]%ÉÿÜn·Áù«°ÿËsùï®H.y¬Í^ý|¦ÓÀþ¨}¯~þS²Í®¬õ¿ÞäøÕÕÊëkÅýÿ\Zÿ4¿@ùOrÀ*7®Mñþìõø§º#*1ÏØÁ~QU*ûߢk§%~è`*.B¸VÀ v¢¦ßZtIE#~f?Câg¹m-ö¦ôôcpmýGÈk3-#ÿimµ)ñÖÖpýøOszfªÿ§tó¹HT ù?JrgjÝÞ°ïôÒì^xL: ³Q0^ÒZÜ·±Jû´4B-Ìi5Ä >MmnÜ$«ô¿sxtê¾Û߯;o÷¶ÿp~éüQe[M:3§z&iwÞ°CááNçÄqYUõ +£-¥§;,¦éÃCË}¾×Ic¥:'øî-Lk¹N:§x¯¸gçåX¾Újâ#>ebí½0y'[hâ{¶H!UùË÷§x§x§x§x§x§x§xçÛ{þðl ø