HTTP-Lite-2.42/000755 000765 000024 00000000000 12173224756 013360 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/Changes000644 000765 000024 00000007236 12173224731 014654 0ustar00neilbstaff000000 000000 Revision history for Perl module HTTP::Lite 2.42 2013-07-21 - Fixed typos reported by David Steinbrunner (thanks!) 2.41 2013-07-20 - Reformatted this file according to CPAN::Changes::Spec 2.4 2012-07-20 - Fixed RT #13791, which meant you couldn't request http://foobar.com -- had to have to trailing slash on the URL. - Don't add request header if value passed is undef (RT #4546). - Fixed bug where writing the request can get stuck in a loop. Bug reported by Florian Kirchmeir. Fix based on Florian's patch. - RT #35360 fixed (fix included in report). - Documentation tidy-up - Neil Bowers (NEILB) granted co-maint by Adam (thanks) 2.3 2010-12-14 - No functional changes - Updated Module::Install to 1.00 - Updated author tests and moved to xt directory 2.2 2009-10-01 - Moved Lite.pm into lib directory - Reversed the Changes file order to reverse chronological - Moved to Makefile.PL to Module::Install to autodetect more things - Add no_index entries for the test data - Remove reliable on (partially) dead website for testing - Now this module is mature and unlikely to change much, move to a more stable and less complicated versioning scheme that suffers less complications in the Perl toolchain. Also, dotted integers without the use of something like version.pm isn't strictly allowed. 2.1.6 2004-01-21 - Fixed User-Agent header problem - Fixed lowercase header bugs - Thanks goes to contributed patches by various people 2.1.5 2003-10-05 - Fixed duplicate my in method() - Added default content-type for posts - header_at_once mode, patch submitted by Roman Radaschutz 2.1.3 2002-02-10 - Documentation fixes - Fixed large write bug in http_write - Documented callback system - Added local_addr and local_port settings - Added method setting to allow use of any request method (GET, PUT, POST, HEAD) 2.1.1 2002-06-13 - Documentation fix - Compatibility fix for 5.005 2.1.0 2002-06-12 - Added a callback hook to request() to allow handling of very large files and to allow filtering of content. - Rewrote significant parts of the code to use references instead of passing data. - Rewrote the engine to read data in blocks instead of by lines when not transferring headers - Removed the redundant ->content method and associated variables to enable handling of large files. - Added lots of debugging code (Enable with $http->{DEBUG} - Changed ->reset to only clear state and headers instead of also resetting all switches (HTTP/1.1 state, DEBUG state). - Singnificant speedup of data transfer code - Changed filehandle names to be $url.time() - Eliminated all -w warnings 1.0.2 2002-06-11 - Fixed a few errors in the distribution including missing test files. 1.0.1 2002-06-11 - Changed default protocol to HTTP/1.0 and added a switch to activate HTTP/1.1 protocol. 1.0.0 2002-01-08 - Fixed bug where content-type was always set to only set it has not yet been set. Thanks to Rui Miguel Seabra - Fixed bug where file descriptors were not being released by request() Thanks to Ross Snyder" - Fixed a bug preventing the module from working with Win32. The side-effect is that timeouts do not work in Win32. Thanks to Andrew Brown 0.2.5 2000-12-21 - fixed minor bug with MIME type provided for posts to be x-www-form-urlencoded, as reported by Tobias Kunze 0.03 2000-09-09 - fixed two minor bugs as found and reported by "Marcus I. Ryan" . See Lite.pm for details. 0.01 2000-08-27 - original version; created by h2xs 1.1.1.2 HTTP-Lite-2.42/inc/000755 000765 000024 00000000000 12173224756 014131 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/lib/000755 000765 000024 00000000000 12173224756 014126 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/LICENSE000644 000765 000024 00000047371 11777112371 014377 0ustar00neilbstaff000000 000000 Terms of Perl itself a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or b) the "Artistic License" ---------------------------------------------------------------------------- The General Public License (GPL) Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ---------------------------------------------------------------------------- The Artistic License Preamble The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications. Definitions: - "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification. - "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder. - "Copyright Holder" is whoever is named in the copyright or copyrights for the package. - "You" is you, if you're thinking about copying or distributing this Package. - "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.) - "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it. 1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version. 3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following: a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package. b) use the modified Package only within your corporation or organization. c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version. d) make other distribution arrangements with the Copyright Holder. 4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following: a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version. b) accompany the distribution with the machine-readable source of the Package with your modifications. c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version. d) make other distribution arrangements with the Copyright Holder. 5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own. 6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package. 7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package. 8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission. 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. The End HTTP-Lite-2.42/Makefile.PL000644 000765 000024 00000000077 11777112371 015334 0ustar00neilbstaff000000 000000 use inc::Module::Install::DSL 1.00; all_from lib/HTTP/Lite.pm HTTP-Lite-2.42/MANIFEST000644 000765 000024 00000001543 11777112371 014512 0ustar00neilbstaff000000 000000 Changes inc/Module/Install.pm inc/Module/Install/Base.pm inc/Module/Install/Can.pm inc/Module/Install/DSL.pm inc/Module/Install/Fetch.pm inc/Module/Install/Makefile.pm inc/Module/Install/Metadata.pm inc/Module/Install/Win32.pm inc/Module/Install/WriteAll.pm lib/HTTP/Lite.pm LICENSE Makefile.PL MANIFEST This list of files META.yml README t/data/HTTP-Lite-Tests/bigbinary.dat t/data/HTTP-Lite-Tests/bigbinary.dat.md5 t/data/HTTP-Lite-Tests/bigtest.txt t/data/HTTP-Lite-Tests/chunked.cgi t/data/HTTP-Lite-Tests/chunked2.cgi t/data/HTTP-Lite-Tests/chunked3.cgi t/data/HTTP-Lite-Tests/chunked4.cgi t/data/HTTP-Lite-Tests/chunked5.cgi t/data/HTTP-Lite-Tests/get.cgi t/data/HTTP-Lite-Tests/nle.html t/data/HTTP-Lite-Tests/nonl.html t/data/HTTP-Lite-Tests/post.cgi t/data/HTTP-Lite-Tests/test.txt t/data/HTTP-Lite-Tests/unchunked.html test.pl xt/meta.t xt/pmv.t xt/pod.t HTTP-Lite-2.42/META.yml000644 000765 000024 00000001235 11777112371 014630 0ustar00neilbstaff000000 000000 --- abstract: 'Lightweight HTTP implementation' author: - 'Roy Hooper ' build_requires: ExtUtils::MakeMaker: 6.42 configure_requires: ExtUtils::MakeMaker: 6.42 distribution_type: module generated_by: 'Module::Install version 1.00' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 module_name: HTTP::Lite name: HTTP-Lite no_index: directory: - inc - t - xt requires: perl: 5.005 resources: ChangeLog: http://fisheye2.atlassian.com/changelog/cpan/trunk/HTTP-Lite license: http://dev.perl.org/licenses/ repository: http://svn.ali.as/cpan/trunk/HTTP-Lite version: 2.3 HTTP-Lite-2.42/README000644 000765 000024 00000022474 11777112371 014247 0ustar00neilbstaff000000 000000 NAME HTTP::Lite - Lightweight HTTP implementation SYNOPSIS use HTTP::Lite; $http = HTTP::Lite->new; $req = $http->request("http://www.cpan.org/") or die "Unable to get document: $!"; print $http->body(); DESCRIPTION HTTP::Lite is a stand-alone lightweight HTTP/1.1 implementation for perl. It is not intended as a replacement for the fully-features LWP module. Instead, it is intended for use in situations where it is desirable to install the minimal number of modules to achieve HTTP support, or where LWP is not a good candidate due to CPU overhead, such as slower processors. HTTP::Lite is also significantly faster than LWP. HTTP::Lite is ideal for CGI (or mod_perl) programs or for bundling for redistribution with larger packages where only HTTP GET and POST functionality are necessary. HTTP::Lite supports basic POST and GET operations only. As of 0.2.1, HTTP::Lite supports HTTP/1.1 and is compliant with the Host header, necessary for name based virtual hosting. Additionally, HTTP::Lite now supports Proxies. As of 2.0.0 HTTP::Lite now supports a callback to allow processing of request data as it arrives. This is useful for handling very large files without consuming memory. If you require more functionality, such as FTP or HTTPS, please see libwwwperl (LWP). LWP is a significantly better and more comprehensive package than HTTP::Lite, and should be used instead of HTTP::Lite whenever possible. CONSTRUCTOR new This is the constructor for HTTP::Lite. It presently takes no arguments. A future version of HTTP::Lite might accept parameters. METHODS request ( $url, $data_callback, $cbargs ) Initiates a request to the specified URL. Returns undef if an I/O error is encountered, otherwise the HTTP status code will be returned. 200 series status codes represent success, 300 represent temporary errors, 400 represent permanent errors, and 500 represent server errors. See http://www.w3.org/Protocols/HTTP/HTRESP.html for detailled information about HTTP status codes. The $data_callback parameter, if used, is a way to filter the data as it is received or to handle large transfers. It must be a function reference, and will be passed: a reference to the instance of the http request making the callback, a reference to the current block of data about to be added to the body, and the $cbargs parameter (which may be anything). It must return either a reference to the data to add to the body of the document, or undef. If set_callback is used, $data_callback and $cbargs are not used. $cbargs may be either a scalar or a reference. The data_callback is called as: &$data_callback( $self, $dataref, $cbargs ) An example use to save a document to file is: # Write the data to the filehandle $cbargs sub savetofile { my ($self,$phase,$dataref,$cbargs) = @_; print $cbargs $$dataref; return undef; } $url = "$testpath/bigbinary.dat"; open OUT, '>','bigbinary.dat'; $res = $http->request($url, \&savetofile, OUT); close OUT; set_callback ( $functionref, $dataref ) At various stages of the request, callbacks may be used to modify the behaviour or to monitor the status of the request. These work like the $data_callback parameter to request(), but are more verstaile. Using set_callback disables $data_callback in request() The callbacks are called as: callback ( $self, $phase, $dataref, $cbargs ) The current phases are: connect - connection has been established and headers are being transmitted. content-length - return value is used as the content-length. If undef, and prepare_post() was used, the content length is calculated. done-headers - all headers have been sent content - return value is used as content and is sent to client. Return undef to use the internal content defined by prepare_post(). content-done - content has been successfuly transmitted. data - A block of data has been received. The data is referenced by $dataref. The return value is dereferenced and replaces the content passed in. Return undef to avoid using memory for large documents. done - Request is done. prepare_post ( $hashref ) Takes a reference to a hashed array of post form variables to upload. Create the HTTP body and sets the method to POST. http11_mode ( 0 | 1 ) Turns on or off HTTP/1.1 support. This is off by default due to broken HTTP/1.1 servers. Use 1 to enable HTTP/1.1 support. add_req_header ( $header, $value ) get_req_header ( $header ) delete_req_header ( $header ) Add, Delete, or a HTTP header(s) for the request. These functions allow you to override any header. Presently, Host, User-Agent, Content-Type, Accept, and Connection are pre-defined by the HTTP::Lite module. You may not override Host, Connection, or Accept. To provide (proxy) authentication or authorization, you would use: use HTTP::Lite; use MIME::Base64; $http = HTTP::Lite->new; $encoded = encode_base64('username:password'); $http->add_req_header("Authorization", $encoded); NOTE: The present implementation limits you to one instance of each header. body Returns the body of the document retured by the remote server. headers_array Returns an array of the HTTP headers returned by the remote server. headers_string Returns a string representation of the HTTP headers returned by the remote server. get_header ( $header ) Returns an array of values for the requested header. NOTE: HTTP requests are not limited to a single instance of each header. As a result, there may be more than one entry for every header. protocol Returns the HTTP protocol identifier, as reported by the remote server. This will generally be either HTTP/1.0 or HTTP/1.1. proxy ( $proxy_server ) The URL or hostname of the proxy to use for the next request. status Returns the HTTP status code returned by the server. This is also reported as the return value of *request()*. status_message Returns the textual description of the status code as returned by the server. The status string is not required to adhere to any particular format, although most HTTP servers use a standard set of descriptions. reset You must call this prior to re-using an HTTP::Lite handle, otherwise the results are undefined. local_addr ( $ip ) Explicity select the local IP address. 0.0.0.0 (default) lets the system choose. local_port ( $port ) Explicity select the local port. 0 (default and recommended) lets the system choose. method ( $method ) Explicity set the method. Using prepare_post or reset overrides this setting. Usual choices are GET, POST, PUT, HEAD EXAMPLES # Get and print out the headers and body of the CPAN homepage use HTTP::Lite; $http = HTTP::Lite->new; $req = $http->request("http://www.cpan.org/") or die "Unable to get document: $!"; die "Request failed ($req): ".$http->status_message() if $req ne "200"; @headers = $http->headers_array(); $body = $http->body(); foreach $header (@headers) { print "$header$CRLF"; } print "$CRLF"; print "$body$CRLF"; # POST a query to the dejanews USENET search engine use HTTP::Lite; $http = HTTP::Lite->new; %vars = ( "QRY" => "perl", "ST" => "MS", "svcclass" => "dncurrent", "DBS" => "2" ); $http->prepare_post(\%vars); $req = $http->request("http://www.deja.com/dnquery.xp") or die "Unable to get document: $!"; print "req: $req\n"; print $http->body(); UNIMPLEMENTED - FTP - HTTPS (SSL) - Authenitcation/Authorizaton/Proxy-Authorization are not directly supported, and require MIME::Base64. - Redirects (Location) are not automatically followed - multipart/form-data POSTs are not directly supported (necessary for File uploads). BUGS Some broken HTTP/1.1 servers send incorrect chunk sizes when transferring files. HTTP/1.1 mode is now disabled by default. AUTHOR Roy Hooper SEE ALSO LWP RFC 2068 - HTTP/1.1 -http://www.w3.org/ COPYRIGHT Copyright (c) 2000-2002 Roy Hooper. All rights reserved. Some parts copyright 2009 - 2010 Adam Kennedy. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. HTTP-Lite-2.42/t/000755 000765 000024 00000000000 12173224756 013623 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/test.pl000644 000765 000024 00000021453 11777112371 014677 0ustar00neilbstaff000000 000000 #!/usr/bin/perl # # HTTP::Lite - test.pl # # $Id: test.pl,v 1.5 2002/06/13 04:56:30 rhooper Exp rhooper $ # # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..27\n"; } END { print "not ok 1\n" unless $loaded; } use HTTP::Lite; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): #print STDERR <; chomp($proxy); $proxy = $proxy ? $proxy : "none"; if ( $proxy =~ /\s*'*none'*\s*/ ) { # print STDERR "skipping proxy testing\n"; $skipproxy = 1; } } $http = HTTP::Lite->new; #$http->{DEBUG} = 1; $http->http11_mode(1); # print "\n\n"; $testno = 2; if ( !$skip ) { $url = "$testpath/test.txt"; $res = $http->request($url); print "not " if !defined($res); print "ok $testno $url\n"; $testno++; $doc = $http->body; print "not " if $doc ne "OK\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "http://invalidhost.thetoybox.org/"; $res = $http->request($url); print "not " if defined($res); print "ok $testno $url\n"; $testno++; $http->reset; $url = "http://localhost:99999/"; $res = $http->request($url); print "not " if defined($res); print "ok $testno $url\n"; $testno++; $http->reset; %vars = ( "a" => "abc", "b" => "hello world&", ); $http->prepare_post( \%vars ); $url = "$testpath/post.cgi"; $res = $http->request($url); print "not " if !defined($res); print "ok $testno $url\n"; $testno++; $doc = $http->body; print "not " if $doc ne "a=abc\nb=hello world&\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/chunked.cgi"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 28; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "chunk1\nchunk2\nchunk3\nchunk4\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/chunked2.cgi"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 26; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "chunk1\nchunk2\nchunk3chunk4"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/chunked3.cgi"; $res = $http->request($url); $doc = $http->body; print "length not " if length($doc) != 34; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "chunk1\nchunk2\nchunk3chunk4chunk5\n\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/unchunked.html"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 33; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "unchunked1\nunchunked2\nunchunked3\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/nonl.html"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 17; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "line1\nline2\nline3"; print "ok $testno $url\n"; $testno++; $http->http11_mode(0); $http->reset; $url = "$testpath/nle.html"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 19; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "line1\nline2\nline3\n\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/bigbinary.dat"; $res = $http->request($url); $bin = $http->body; $http->reset; $url = "$testpath/bigbinary.dat.md5"; $res = $http->request($url); chomp( $binsum = $http->body ); eval "use Digest::MD5 qw(md5_hex);"; if ($@) { print "ok $n (skipping test on this platform)\n"; } else { $sum = md5_hex($bin); print "not " if $binsum ne $sum; print "ok $testno $url\n"; } $testno++; $http->http11_mode(1); $http->reset; $url = "$testpath/nle.html"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 19; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "line1\nline2\nline3\n\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/bigbinary.dat"; $res = $http->request($url); $bin = $http->body; $http->reset; $url = "$testpath/bigbinary.dat.md5"; $res = $http->request($url); chomp( $binsum = $http->body ); eval "use Digest::MD5 qw(md5_hex);"; if ($@) { print "ok $n (skipping test on this platform)\n"; } else { $sum = md5_hex($bin); print "not " if $binsum ne $sum; print "ok $testno $url\n"; } $testno++; $http->reset; $url = "$testpath/bigtest.txt"; $res = $http->request($url); $bigtest = $http->body; $http->reset; $url = "$testpath/chunked4.cgi"; $res = $http->request($url); $doc = $http->body; print "not " if $doc ne "$bigtest$bigtest${bigtest}chunk4chunk5\n"; print "ok $testno $url\n"; $testno++; $http->reset; $url = "$testpath/chunked5.cgi"; $res = $http->request($url); $doc = $http->body; print "not " if $doc ne "$bigtest$bin${bigtest}chunk4chunk5\n"; print "ok $testno $url\n"; $testno++; # Callback test #1 - Unmodified callback sub callback1 { my ( $self, $dataref, $cbargs ) = @_; $cbbytes += length($$dataref); return $dataref; } $http->reset; $url = "$testpath/bigbinary.dat"; $res = $http->request( $url, \&callback1 ); $doc = $http->body; print "not " if $doc ne $bin; print "ok $testno $url\n"; $testno++; print "not " if length($bin) != $cbbytes; print "ok $testno $url\n"; $testno++; # Callback test #2 - Discard sub callback2 { my ( $self, $dataref, $cbargs ) = @_; $cbbytes += length($$dataref); return undef; } $http->reset; $url = "$testpath/bigbinary.dat"; $res = $http->request( $url, \&callback2 ); $doc = $http->body; print "not " if defined($doc); print "ok $testno $url\n"; $testno++; # Callback test #3 - New callback syntax sub callback3 { my ( $self, $mode, $dataref, @args ) = @_; $cbbytes += length($$dataref); # print STDERR "callback for $mode data is $dataref args are @args\n"; return $dataref; } $http->reset; $url = "$testpath/bigbinary.dat"; $http->set_callback( \&callback3, "arg1", "arg2", "arg3", ["arg4"] ); $res = $http->request($url); $doc = $http->body; print "not " if $doc ne $bin; print "ok $testno $url\n"; $testno++; } else { for ( $n = $testno ; $n < 20 ; $n++ ) { print "ok $n (skipping test on this platform)\n"; } $testno = $n; } unless ( $skip || $skipproxy ) { $http->reset; $http->proxy($proxy); $url = "$testpath/test.txt"; $res = $http->request($url); $doc = $http->body; print "not " if length($doc) != 3; print "ok $testno $url\n"; $testno++; print "not " if $doc ne "OK\n"; print "ok $testno $url\n"; $testno++; } else { print "ok $testno (skipping test on this platform)\n"; $testno++; print "ok $testno (skipping test on this platform)\n"; } HTTP-Lite-2.42/xt/000755 000765 000024 00000000000 12173224756 014013 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/xt/meta.t000644 000765 000024 00000001073 11777112371 015125 0ustar00neilbstaff000000 000000 #!/usr/bin/perl # Test that our META.yml file matches the current specification. use strict; BEGIN { $| = 1; $^W = 1; } my $MODULE = 'Test::CPAN::Meta 0.17'; # Don't run tests for installs use Test::More; unless ( $ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} ) { plan( skip_all => "Author tests not required for installation" ); } # Load the testing module eval "use $MODULE"; if ( $@ ) { $ENV{RELEASE_TESTING} ? die( "Failed to load required release-testing module $MODULE" ) : plan( skip_all => "$MODULE not available for testing" ); } meta_yaml_ok(); HTTP-Lite-2.42/xt/pmv.t000644 000765 000024 00000001252 11777112371 015000 0ustar00neilbstaff000000 000000 #!/usr/bin/perl # Test that our declared minimum Perl version matches our syntax use strict; BEGIN { $| = 1; $^W = 1; } my @MODULES = ( 'Perl::MinimumVersion 1.25', 'Test::MinimumVersion 0.101080', ); # Don't run tests for installs use Test::More; unless ( $ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} ) { plan( skip_all => "Author tests not required for installation" ); } # Load the testing modules foreach my $MODULE ( @MODULES ) { eval "use $MODULE"; if ( $@ ) { $ENV{RELEASE_TESTING} ? die( "Failed to load required release-testing module $MODULE" ) : plan( skip_all => "$MODULE not available for testing" ); } } all_minimum_version_from_metayml_ok(); HTTP-Lite-2.42/xt/pod.t000644 000765 000024 00000001167 11777112371 014765 0ustar00neilbstaff000000 000000 #!/usr/bin/perl # Test that the syntax of our POD documentation is valid use strict; BEGIN { $| = 1; $^W = 1; } my @MODULES = ( 'Pod::Simple 3.14', 'Test::Pod 1.44', ); # Don't run tests for installs use Test::More; unless ( $ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} ) { plan( skip_all => "Author tests not required for installation" ); } # Load the testing modules foreach my $MODULE ( @MODULES ) { eval "use $MODULE"; if ( $@ ) { $ENV{RELEASE_TESTING} ? die( "Failed to load required release-testing module $MODULE" ) : plan( skip_all => "$MODULE not available for testing" ); } } all_pod_files_ok(); HTTP-Lite-2.42/t/data/000755 000765 000024 00000000000 12173224756 014534 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/000755 000765 000024 00000000000 12173224756 017306 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/bigbinary.dat000644 000765 000024 00001000000 11777112371 021733 0ustar00neilbstaff000000 000000 |m! o 0OxX X JzH,jA˿ZlunA8.Ecu JR4jUu/"Y)ةH6Zcz',n"90"|C/Dn Aπz.Sk1\?1ԖϾK E /q1ˉ<_bYQ[2RIعm/]H-O$ /Y0GR&ki35&cCXv1qM?𚁘I0o'e7H̫{([@V >OL]`T4Ƨ+hΙag*gR{(%:Ҩ>|V'/M\c1 |)6<Bu`FjbPhd6A鯜MIp B8k 9#lE:plKy,h5d:!`/ϳK.:8R妘"}pFA}uabb;?Y*>_wq_b?Ua"Lm$.oi W֤iz1ۅA+[bY$8vx*`s O.lr󉖡C-AjSl?Y꾯AJ$'pB1M$%pSE ӭݰd'%}D)f:n#GZ!,?S4~j 7On+违vTr1/iT8 ?pT Pa|ǛkW!:$5q : 0`AUa9wDwBjϼxr443?b>Mhj`t|O,HqZr7K099yb) W@A6b- :<=?)'h~4빘ϻϓ]^ lK)+|Z향k9ܮQZƀޖ|U &`|Q`I=qTAu \u1To<= rVƭg0W%U xɓ))$=āuW6 WQ&cw sO wMG\ XTI]} S=R8N˛oAxi^33IQغH9@ڸVW+^7d9əTVctYW{mcva2 +#_ zn_'g1ev?HF+- Fvxhx,dZvIՃ>_N(s_7j-7':U,(UUh>%tFPi7Ѓ^zpДdrB,Z"bܶ7v3D^K9F4g|ax[$c&egtF!Ƈ:6 dbX6, |Z(%(#m6<&GN^avd^B@RwK_$Z ɭ::AqVi1歠Wj\: `pBnt``9 G<ufuDJ,m#=IԆvLq()ͳ5[|0QUU4*=}q3@3(=nә sY CQEyݎ`C {J!9)u2[֨G 6-N%S2ѦC j\]Hmqusj(rCkQHDvHk݃ɑW놹M_/ᡂ9<ڻY/_oyRR{ҴYzB[#(o$-Nѿ]5^Nf LO B(Ot4 rÀl~ avȕT+&)ɲTJ+xǚTR%02 #\"љ0 TJhPO|>}$7-6 "XS= agެ+$k<.y[rbBxYX^z9'O08|$$HOC*hpcW"B3lU), _ԅ 5&̼Cl‹4+@;bWjE*C2E{nʾ >UGWVKBX](< y;َ"_sv"t7kQ]U*3W}}6fYJ@W1.YC:Ihqѱ?]ѿrGDMowuØ,!"L r6:M*M9(5ʞК&Wp8>O2&;Zg$RsaXwk0ʁՒUvEglBX}<ۡ#}LG3jOH0aھ8E< cH߉^tǶt.#ݢ8a&_ }a}k&k/-3Fx?2]pR xy9VXo%2 HQ`Pحa$yEVOSP z8ZRyvP>uYC8d,iȐNO 2zKb|4RAvzcD0hTC?EQֱbZmYb/\Tjt{\FWd(?7@p]QT<w*+ Bʠ&^ٲT:v`d ?гEUȶ/@e$n8 QzaCo{MCay >^]ORxPb@ڰe4!b93ݑl%f[Ȍ|ai϶s>Y(5߆U.8 SƲ8WڹU 2G^jH*|S~r4Ӫf՟bmHlk.ӬYl\Z:Ka@5`uwalT9 a2W %鳓:+ bdO ޢZK bO sWBs2 nipZ'x9`g79NYxC莑?:Fl[|JJ$ɱlBIq^$bl]e0)pfupaGesS[7U[ѫTRpzJCŁ)d8:A$IoD&DfR h e %o)%ǫ)$wIb'z9'm(c> ׺4?Cz-"fɟ_e3Wp%?*(6aU{ƠC .C!)p:N*_.B?Ef7JK50*AehWJOeQhmyw AF;h7?$=d&+Ў8gS -0or+K-tFi$;&,7¸/k:X1&?ٴ)D˷ |~irb{BT8FY{Ԣ X)BO = Ex=Tw UE; }\+90 ᠸj@*S$V8#y,lqaA ZBm;X{u_~^`QzfsZAv̑rysZRҸB'[qhVHy!~{&dܭ1d;W6pC\S>29A9NH2Ll&Ο{=^Msg 2 YUe6lKP}-#m h7e:vĖ7*OݣC(kPFn&qPo=%ь_Ys † CG%.N7$)m3|T~x|oG51s[ U`F :=t p'@=-(]y8l] %'0Ms*Xw?۹Ҷ7Wqd p=˟t_Cx'0v6:ƕH,I)6C!э^"P~495dzK aGr=С&WqƑ7kCw6TfyUTBz̮63S)=R-xtvz'Y;<"D vY=r\W@R;9EcY!Ԏ>Q1۽1TyǮH3Vl: ύmm.VKV]r?Ox4E*&=FXf+{l=V)*&Wgp&WInMzQM+šφL, SiF4@:QkHM0IkΗ Qp DUJi( ? 20# bxdݍBx@Hy{Χ[׉H Pq^üa.'HxђDmWMoij]ߍPOx}@"1RxQ Wh2:Dޚ~74BpiWZ\RJµe#fT1cR^\͂`%2~Iuܮy}AS-</ **2 $0K6}ֺۤs}8Q֡2gxGa'&z6RNnxb>g޶yɢ ٌXֳ% ڢ䥦ú> .e/Yr?g8s#MtdOgEl흻Ñ= BWEZp_޹+SApy 뜅HP((ڻb o0YUoՒo$.RJS"ݒ䤉6*$ S;)-,\1Cb-Y|+`*ӅB(=F$EmS֛ݱísS)>cQA;`m+T l{E4 vPs6󻂡]fo2 ƶe+ %KV+cMSY5s۸vWz=x( !`w*dl7IJC Tҍ/h |PY +fA<.ˇHTkKW(lRki/4z^X.iywD2aKΩdeᜇ:%혜ZeDgPh7ׯjF[ikqkvV\Idf p~Y3>0,\=gr ©/@B* /%;?,^gV +ۮcAs Y?ĨC1$4m>m!a,3m?4n*m A^mK wA",Aߘ0::؎xnH]:Cr.z_XDedCT\ISo03jZ\᎗˳ڬכso 5Dƿߒu VjFMr?G& 0:Exv8S8UV3hP.ZpJF >6nqp9 ϡkЍС}y*yUS;ed& OC|bθŋ(I5'D,4~aÔQH!:p~_$x뤲ǓlgmtY^"2=(Tuc5NU00 Ep>O bšt\R@ax ^6 Ni6KRcW>贼6eժ4}=vvVWM0?EOf)D^dDB7ۆ5޽WG+C}^H"҆]9u&zԈ""׳̪Ey a5S baI]|#c̞l\K䪖@'|h*Jdqfvb )e0%wDիQlojxgY Sj˵yiK[o'"D'\Rp{#90::<:ld(DENȋ^짢='+Q{>3PK| uJԏ0&DMU #H*y:%v1TWn b7>:K#ԑSV!-gJX搟 X B//f4ڏ(1VFi/p~s7WJ1K5};6mƖbS&]h'{!bPL =7;v$=kwo 3Ue4Ժ-;rۉPizY8cj6s.@^@*y4SHPYn29ʼ5ZH#SX;7 F0Y E,+o 2X촆XnPRƌH}q-cLRB!VJ+9xp<&HwrwwN{SA.軂гK b&pz<G%= |h? O:YtQC@sG#a7h4`^9RɓxGTw0ѷGǰ>WW ݋.#tQ:^<Y! ]b%Cc\4d^BׯųD 1=|1YoIVK<-^q)^_p'c Z'D#3۫j F40#p/k9`.ef8pBEzߞ7zMvs^єbν׬bÔsF Kay.$#{5y?1P=KX } l]x}?[ !<";F^۪~~]Vwe;gegN n K61`\hW/m OL\׼ocJדK,q4h^`A\ k9slgoV ?xCF LwGRb|qxgTIh(4ݹr踞n\6-!떩]9+f"0NB;0%׍ k6IEO3?-(-u{ R͘~~F6BJ( JY54'o9L-"ԳJ]"&]+`&wx30(0tԴ| * v.}/-'nWkJcj8-$[bQKL)}}Ĥ k JʷSNuRx\gkR} r^ t/9؜fm9 Ґ`g*8~R<1t+pmrI >N<~¼ e>'0,Nl~@{x=du'sYt o)'B  a-:x,]i P6IWHq0'IWr.| 9>n)q0@\օn-}oӤy[ѹ iTQ d{oAdńraR"zBĠ&uT R\偪8qzSDЪ]<|cP0}o'$6^j3_0f1 mcFO / j ?'|dG\Cgj No|fd };7@-@k5Hb Ja=vؚkW1Bӄf:1uƦN4L&϶-v_tx̉/I[7#;}#%Hbh]Ζ`UQ=HF]ܝʼ+'Iʧ hDb)_8i:5k=IijEyq>Dȼ! ST̓Ȅv 8\3?8MqFtN@Z*{|dkۉHK%"l6xp*ھ6p .Oo"lx/%kb ='{JŭLzv ߟiX{NXE.l8=? 4q=`H!e#7د'n^$,8tF TFfMlxda-YY1u)O5uwڋv_lI4Җc|[Kz8TYas~/"fpt$eF!O]nĽYvN:Tj ) +_Pô-sdF$jKRgo^Kꈠ '9̋39RhS.$Pe +Ϥ;aNC8z5y*ޯhͣ'fX(@Rl3fK 8Ϊm|15^~z8,DzץDyR+c-PLԙ]l6EoҏSٯl'=mb`k#?bjv*5 L~A;Jz5ӨQ>@ǵD7W$ O^ Q9ʺi*^#ĸe9ULLtSJKܢuhF&/GW[ "[d)6 t嬈f+CeE$-~/n-j>cz\Cy%" -18FBΙlh|'EKյ\n)r5|5m:jptBX9 Q$lP1ד b*Uk+ 4 J {v/armWIS:Y"cdb<{KDn;$/D"Rf's}^9~Lמ<0*6(Ѵ Kk <:XV ˇ w  OGuqPH;$]V/H @P]w0hLDˉChS࣢:i}A&2~9NA :,N&i9иTPrEr)b\={}1i72J ^Q\( WFG#O!;I) Pݤjy7>ɺ'):N:ga] ;#p$wt"Uy [jT5KT;#-G}C|B~\`> z"PsЫ9\ɰI镃 >rpݼg*~7]U-&0>=l:o~͏C<%Xs嫔 DQe@W@tt5Pⵕ>ecמxwWepߎ 1~[|S,_JJ]@~+ؐSrZv ltMu_ѴۈVqLbE$czQnywU]2 Z!Bǜ |kj,sssqR^ަ4(lDw '^D VY-g2QRO=."}~ȾX⹘ٕ/|P %EWZHʫQ ˨X9Dq=pҸ{ڳ3OfČQ ۗ ޥ"S{Lry33UޝRr̹1`LI)qЀom[ȑКKA-Mq};0#Z 2|EsxCb`.j?滦k(N2'rRsX]6|scY&ŹOmlj 7V#ThzURh%}~C-( M`{^clpG> wMk(&qn>j;TnW#Ys8SKDюrʼ7L p_U re1,3ΤxwݢQ髇 5Kvd~ՎA0[YĈ>C)|fR$[ϣ]6w>Bq*8sژ~W%2 .+bFBss0"V<̝&x IJlelX0o{{8 CkaNI?u hNDYiӆDT8cW_GhsT"w0z}9qʉZp3|Ϗ^`E1ِMIa' #炏z7\K h3p%QI({ {LrtA-,QuY{ڵj|3.DM#Xd+KͱRQF,VU" ?hb)tU'6A:^):TS;*$M9є BNFCD3 yqx-ulV(PMֵI3#,CDS2'IS%>lnA`y[,w4İĞpy(;3Z*cqwt)tW>H5݆-wM1 +&4MeG?"#9gPd'\*^͗kνVh %Fӹ#(y<:ʝR0Oї#oT&'? ߻x|14QC{#,ph<)WVLn.x{p&E/ I՟Ă7R"-c>[aC=\T4J-&amDIȘc-yvL=@o)Wu3XUs\t vr>GpvORE c}uCZ_t3BCBiPv2J}@ OԷAK |obP@ )82f@6(1@lvx|~RRm']녕rrx.oհ] <04:,Xx %}an C(7)FV#4Q w!ظ3CUFxfYqz\s4ƬD=5Qx!|鋃'o` w=;/٬1!no+g`Rߝ!}9 Qa6L/TH]v+!7$>?g:AٮJe:p8SV~86GZGaw[QʨX~O D"z']RcZb u_A3gFݹDZk< ɂ&H*1Ȣr7E;58[FDy/c€ Ik>Q= 5{WG]@nipk`+H- H !)RS^fe/o-+N 1]pgv1+$r2B]lRk*w(yQҢW#:ntڃS RKV=b'~kZ/ %~- $oMFG 驧(dp݅D5>beum5<r!0#٥d-Sll)Wn#ed?E/T@RsY[^X /]Z3AXXRkiaS̘Zj)e?r&e90*(4Sz4wCo^OȰ0 Vtgk`*f1dƎLゕ,F{Bm@NCZDqb6-qaZ: *WjȝXA^䄁 SHA4ur*#ʬ NXf.4IQbZ'Cא>yv_RMLZYs? v7±(ج;l%]oJ-4E*TJ]?sC/T T*u2B""n.Ff3(9J-z#NSSH  } -K\y+̤3*F׻glhF{wFD"z: >Z5ĀN^PUaU`KȇX9TW ;SsY85Q4(+>!+SNT߈UqqA*@N)Ǹ71v>2Yj{T '"weKs .9G$vh#An$dxg22)xǒ9eZe'h;7wmA ,&b홲qې}J ϣM-K \cMSj?马bs1Ez17d r`,X F}:KUU9 `pLtfnVhGM`~97'%_4$/ RXRl4i~9OPRgi?;MfF4ʰbe yF?6ɮlryX9W-sr(W_e/Վ)WRy A׌u'zrL,\ I_$UR+!h1=hxq>bTl{QAc4c'lDŭh"z'd[cbme}HM.`j@8ߌg\`3Ϭu-Am}X|)J+5]BU@lԒ)e-`MC{oc]^8q$Ptt[=%i"'+ 9Y뇦= :n*NICf- *Pyr5)G |B%1`\ 5Ȗ n%u+ʮ~cMsQbv)U*C*f 5%$3xLDBZ^=pٓ m[OUUs24q LӹPqxrE=ڃwZmP/Fn)3BѥpKQS+Ys_5Üu6<"J'?~彾`&..xBwZ=02ׄ]Dg5y,*'+#c玢Ś9\%>ܨMP. I6.5֚+q<B_-tƃ_{S]N L.:kJ h G4YG烌ˆԊTpZ&vZ<+ԞJl^Jl2+ߍ> &&mo;aQ̮:dź(Ӵ&diR5au}ЉSM(Z,Ĵyt2W{bBV~sc>M=wd: wJeua 5TpmJu?>Jm8CLokŒה؅9k+1b?`j8V)B̞ 9]8s?!|Ui% :X[PvVNaOmexrADEHq }b.%Z슫*-OvH˘G RM@>moc8ru6#cq}UF}.?E_O !${=8+>`!۳drSIç\[Mݎ%Nm`& tN\p?c"v9!ب2y'Ugq]-NrdOu* 55hSVcѡ癧(^ ^ļܼE1ҭYѳn/po166gqDgqu nC6h\?V/Eug[4PmԼլ3jlMOWC৆@]O<@ _̲A=hd$v2}n+ Bb~OAmttk窚t|]dZ5z!W {\O~ysY,YFa;O){^la/_y( xsGa&NBC|7*sgrw#>]/sxYYa^}-S>RUjXu홇ј|Ey9[1SCte?L&ʩ=ض%'Fo R;zj1W~Hd 3~TF>\!iŖ|8k\+ņI}᭴}0+xp\02"CBjKdiw.z~kFg@? Bћ`)A$Due*npIb`4m,R7@΅yfb-;ho V|l$Ijhl*qՎ|Z A)/x2b)u,ٌufʾ4}o=+wѤ8xboގl/Oi2)|]Z2a{+"X#xnl;`BtǧߩA>O3`hٯIpܛ082+2.[=ؒF||C:HAzaK[ G&^1ĵr38)rMk%30rb8@+-?_&ue؍SAjƲUAQ39g[ցM޶Usm OE0+H!GW.2Ȥe*K(Tt|K\$Chx Y)E)er/sWcgz׌NrȚC@iS tL-k^|8dxz@c¼7^XWv '%Bo6V"n-41YH$p1C?G}ʤy]R:s zqļ"io*,*@(N`1SLBP.M2QDw^sh)|)~nlgN'z=9l;c^zǘ:Mz)2V>_h 9zT/CFkR% f,G'ADSXԣQkwb`<+y !3t좍Wi)ӐF`z{SތR ^ji.);BuV _B X [#~Dj։$ƴH9:]מq8a܅, Ä$V/AwY>zыeҗy|l)J&D+-]hn: !K6s2[p/U*FD=sg8Hh5_ cg"Px!HoL6jou>:p#cP t[(A([^Q2]!z5-(!5O20n|BzBDupVj^$de+L3P}"}x.h6s#o6&"ܹ u.SVBKN9+$ n!J%]^vb>xiMP\э8@ x(Oaϴ 9DD /ilu]a@ bOGǫ9<kL;8܌F[Y54/8vuo|Zesi$j۱$G-.eڥ} }DB{@N DBofҫ";k!#3t$B:|Ps)=Wغ:>NgdGe 20i?!րLC٪3YEyQ\2{c@Q;'J2Jf$iW%MRŔ(ĨK5XPW[;Oeϸ.f8 =HLR4q\x },d$deРKtfc ]9F>}whjtތ/v]``32ΊvwTEM,d5JQמ7uVsʓPқEE K'S >f kGKC} k* ۸'yxRmjjaaKSut;]t 3<.N9q`T/1Pgb47hl ,'M吮1Ή朑 * ,QN2XXO6+^bGWO8DGHCEt*If vgB*Pu`ht%mOtn| 7,nX@nyEhu{LM>H]1"XN\gİV.l+\xxbv*6: [>t$ũհBvaie@X䭮}A5Q6) AZ翱pOpBQq QA-z Q_U茑}LiKNOyčZO b mvqRzjb%fE|QgڝicI -N*y!Da%7mqY*yx6 25 6% ,^2x+XEr|EMɮRj[Z09v8b^JVB,)T؃1$5VՑ^~g. O׸YoNׁ hk/'ZaNTUSrᙔc5*3@ 7RkG%fIE@{5o(5_SGVK hYBf 0`V4Z=' aIOLbd`E±-wp LY@ui`BLUh5!nP_ KQJ6V (^]Ybp5Iﲰ6 K s` Aܜ码pѴ$8,PVt"t22(u>)Ѩ-Ns*(W'hjHEo%0Y8$dwt/z=j1O~U #7N b  Dѿl% EK]iNd ZnjE$A%+&x䝁)\tcTvu%2nײEiB܉9+֐zT^Lf5^$ܣO5ִ*KuL 2z.zD&L83ON|,2M*/ʾFbBg n)R1R&Fb0&7O w(5|Z%6 y2MV"9Af' Dlm߼Zq|=yE|@a~·C*6_ nv"'vVWOWV۾*IWw yeNkגm=Dzr+䣰3R#X갹M#l$2H.^! _%cu2]Uņ=\C]YܠtƠc I̸RNL S8U5іbы`vj%ՃGf2ae<45c )޺%Texg36Y@Gq/0 C{KRJ();[>7@JS&`Wn Әn_BSwQ,jCE}Xfj1,~_sYd\J5lbG>sy0Cj~fgfvP;Y.΂Շ+C$s‚``9K{q:IP{q#8q'B}?/N", O*>g(Hnn~#̂݃'̰KAuX-dNvGo6%^͍6AB nwz0[AǬ:GI}QQ\M-p6RqD ܀P)_Bg`-MNRӽZEkH!Q7V=k` |gt/u H&J D! M۱â9ܕ&MC}lwEP#̄-œv "ʹ̻9dTâzI+NJAF8[l|nC2Sdp>V*47Ѫ]jq&6(画qxJ4ƫ~(!~Ós~JB)|k6D`?y&h^)+ATP]{F4{;\FEGU4];19,IYI8VȶFT`{z\_?vBãTU%mfWX/2}Mo{pȹ6s}$~AC|*v=X=+wW[R-|NJʫ-C`pPIFMSriOe&f3a/>{46a&QW+ pd2(\GYSOT ݽ%bUMZҍ+x5Ař ANi T댶TmHARi7ԥɋ:xLl7)m@2a$UNYMJIklDg7 {{gB5Eb8H̼E1"ƹcl͆kRslmJНGz D !0JU$UR8^C;Fp Ƥu"DSeˀxIpg5 2WmaIpJnp8Vq 3j;0Xـ3ΛtЌJCuA0|5"J׹ Q@a KMWylʐ9KLޘYoҨ&ҩ=Q9lmDŠ`lr@/3Rj~. E2]83\Vą^=CeL q3dS y hDy̓ۤ$ħФr$}8JЙnu'AgN]a}nm~_fdhdGU> s \o#y*Qw @t$^P ( Cޝ:'M,EGEG"u @=աhio %]K9mj5WHۡ~]zXĭ/c9 踳; HCVJF~fvスI|;1BI"%s5Z9^zE͢[v xy,9DýGxQc$IUMu1-ٓxi 4E. hfőܢy"}B2mYmO8  ׳;dud>ƾv>\W[xG@ 1c mm56N:V=k…t4veF7џ_nGi*pISTS:/2iS~vzSh8"3HXU h2v}5 3\r/( _LaűQ ,U z0@0lgŝmE1u )JG[7MLX!B'lQ&4;i38_'N5^]{"jk5B4|֟:nc̒=Oh Ŕ?,6ǕQ+/zG`"* YMŎǧv2(D'tSdk1)X.q qcR@GʩHp\Ǿ@zO=B\g[.'v%isr&ϑ;$t (EAD׿cv3ybl0KJt3 &;4c ]J'F|6]?1Z# m3v1,`Lp k.d4듳  MbFu{XCdQ.7X3-r>btONRF8XWM؃p 6vr9|QLL׳$k8j߫&J J{v(<C q؎6@z OnyTIv9@+|yG4Mvr7 T1x\,5r[I^|"#rWI::Js_V8 80pTJV5QfwMS6/no]HdkUBRzb֩qjo۔p*ꏊ.o D[G-wif^Gle[c"7rzaPtVCkkK6x&4$ߝ~>a:Rˏ.$c@i+BXp;{ O^vztu{J1Ԍ5Jlޓ ^7 X{2KeC]+Ơnco|(2BZwHXq1l!PSON`H#ZMoʇf;Na ŌHW77=Wo pt˱O,z@BNa ߁u?,BGu iDhoT %ŭ5G"Q_[;߃W?W얁&6;WV-C^h=2PIP&1ntM.F>cU U@n%1ml`7Y Vcei%iP,A| KnTh VO}J X;;H7N:#uX1ph+4;(8# ,m+\T#LkWu6Nw w7bc7*JRKp\WWV7/[)ؚ~ac,]2QP?PB ~-*Y똧~NCT 6H˨̏4;pY hw; l#mG61S47x0 *>q7IjuRh=>꩛vL٧sC$w=,#?^Ě=(\94u^cҐ M !fsxV-=/}_tIzpTk`'+W' y'05}ur pA2@a0r՘Ǯx}&%rYcgsvιAdXʬu$^'_,t<'\"z^r]+D`|0?Koahcy>U|DFuNnNZsҕ`J%x"E0FQ}a=İ$x+ ,*-@ cHѓ1DB%[yz#BmO&36rPP".L$?<|ml`7?IM{_gFx>!Kj3o1oIS,B hiGPBh+$?vU`jilK`a\e/}(lüw)+kvYdR#1WBI~t,rdtWe}twQݠ1z1S','w Cc›euJkFT)f3Ԥ$@~f\a"ؽ+oq:MK|H5L1[li43ҥTv(`Mh:# "xG i[nJЅ+ȃqK,[EN#FG鷚 $HYU?Z %L)LnTih & nL_?X||N?u˦YC4@@x ̏5' !&JO*&{SLn|_-+9bC6V`!N{*pW7B-(G+pZNp4'>Ԡw3WGV J>kJF t"&A,CZZ4uaMQ?}Rw aB̩C}e9Sm6 ßo`%H d,<5Iv̐*ظGK+"<?ԆD$#!2*˦'-}-Gg!Dgōg1I3S  JvUHI)J6KHc V}b=~SrG5&`'X0t%ijPNdb/$ >7}: Ѷb`! ; k;Dz#3`8ƹ!Ҙ`U;jjW f]eJwh!.Bnbskx/d#;^%L/Ehv(IB {Vc p9e~4`n}zfpRKUy&t>lz(^)~pFВV[h2zW 2S=Ng6` >mݠS";nw`;԰2Սɚa`HkJBRE˚pTT +Qߌ'ԯ!== 3/)3}^B$f*.q$җ2dC?_daayO=O2cfӹiO񳣴 [B&r7ĘA-,r?0pH,Tfa{dwTp$teQrT-+/i~Ak/M}gORqyRa_)Vi26zHԊaɮQZ)yHXOw7~i ƍĭBu#YN$Zl/Fsr|ODBL(]3%#ߨ gkpE$Hfla@;] C!FP۷G뢌 כ9)=~X?~Z٧qX.BAbXgNuG.wq~= ٿI1ZY,&[ D M81 SKգn-A)QDMDS\?%@j06Bzם; (ıe/a]l",9]h (o!f@vOضhٜ@Ȼ!iBKlv:7Vó2]rs%i:ѯ kK/71hxbŲ:;6|I,ɏ9mڽo]?α19+o\}}ɛIS'c\4g)1W-w,i} ٢ qLπR" Ȣw]$iZʡq1W'gI=2ޕJvY0 TRz(:.<~ªȋu]8Cuw+UDC6l\ c=ŔKaؽY$QFnJ^4<mX\:ow 5xgkR\f)iih82);݂ TY !fki=yPK-%X:N9ʼRohoH$TRRƃA6.*C&L$,~ϚӋ4inCBMm!+}ӃSY1@ Un: >eO쯱Yݼ1_ەZ. d4Gbzf^'-PU3+NdvP:=stBクqRkvϽSM)Խ]_\2-:5"`\>)Klt#:JV XffGwQY=.u_,jPV͈᡽Г,bsZGWxdB s=WI+R'GBDc/4NDQh GeY%vc)j3G.1+xIroZ T/5befȿhJ[y Ǿ@Xl7ހp#?TEQT :O*Owػ}l OOx@JBfi-#a8LSp<|#SU׭9nL%X dhQfDxx`JE &; )TUŦ d(MMb;jnV M b%,GA}sF&=A<;ƹBe)@A*RfD*H.}SǓ<Σ|H6k[ #۟Wݡm1iܪ j]r ]cJ[qf0S7BMt(nIT//O&<U h-:b,Kt]G62q@ƗcQ?ݩQJîzu}ClU5Zɯ[!3|[k-+^EL{{f s}IЛ!AH@}`}sKaPoC*e"9L='EP.4P]Z:JS2a > ĩ6vh#H%_|ұRTV Q}&no(iQA˯#HB8ԓZZ#]yUsNMVw 1/>q-5Nϝ}LzDڢs_xG;c*w/rY?4& 蟇z|>/Ay O.s:̓px0@G;z]}BA41Y=!7XP9bR7 ."x AM# ,Q$c,O7w8}she˙>ݔp"l;c>LlH[rFmY=x`,J-Fˆ)44w{d&JD`(= k$j;_PTaɰF?̢AEڜq7y7V)$o7DŽJ! ؑNn/寤uC"*\!_e=Ǜ L1|k`2!~Oh. F;`H<Ңsn <\OuLcٌ6Ǵ3u.@-!59S.4 waڡ?B J,H q^Exkn/T8U"plFJ'օb$MUV݄FG&X O*Cپ!a(ym{iR8] $<#'?gBI?P[ ;xCSc``) qH^MA 1b*0N}B.ßעb#@"dz" ꆓ[u .yMc$_УV *džSD~iة!VkPI_Åg9T06聰mh (O7]/ Z2>hj@<7*HdafaFAW8|o1m~DӧG1 ޖvZ}NhxȯgI/bp~tz:? nesz}%DrcPB4Jb zk2ݝRqE=G++k~4}'ч[5ÅN7%wGqʰ3=h(>~ J筓O8tar9Rn~] '߅y6z{Y4]K* @Y;yy~B>/ ˆ? B1$=knL \4<ʛS:M$uWַfExF=Y7 RakFs\dd'+8cR# or1IPީWK&gܘY{tY^kc U3C$ H)TuJ3ZG0M"#ϰ?"e /g+;*}s ^oKV+|ROYj?B8W- {DpV-[a|HM9ڐsS +}g#={#ucǀB=(`ӟݯG5OЦ6Őzz_Ef$?ENP2S0DG "e2*[߼Ł,PK kP QHIzr_ixidD b68}(WoDD,fb^ NXz2_yhk\Y2jiKO&`1 s4qNlǿ}Rt$ "*];|YBkHS; κ3=Ԡ_ }㝨nfAn w8(\ ;_v3[V3J;Sɼ(olhV*6bxDP#DMݹ$;Y U{AE%_?1O"PtH!<;fä)iYRR /[8ΞGDoT-ACM/fxY0I͌$pk/聙j8Dg#n3>G(8^v=I5Ԡhf659OL}fc # 5WZeItmdjp+-⫏JZ\=8=.9Uu p?mv-A]4j,1Z*/h2ng7e;/VoED[0r'* -=\8;{ɦUc󕟧tQ' /$v?&cPЍ#IX[iQ1\KiQ*IWR֘& YE^s{3ygj%fN֤oO1L;#؟j8 "qj^!;AZ+owbzc~"wZ&Cy/ncLryvލ-_KA -akHG pG7k05ݵzcMPfA) eq. }e\6;,CwVHdO/tFfb~P鋅'_z{\XիlNPp+vϳ"W:#|dɃ2WO}JzL,JˆP%kH4>1(h74 ^ۉ٢Se^\!"[8~kӸvnZj?$ WjȹUfiaH'!KnDgc)C Z,q-8CXX¹ѠeKk& ::Z6iIWy4K>i G a3TgXxx7;iokQ̧A}8!LQq55s0PtųbQey%YfĬX>u0d+~B2D}@Kbm3);KՆ!m=s.\iA)%5m>6\~?:)wzs@IH%X eWڌfw#U})W Mn_&9`B9#.@KdFb/`}wt i@t.G|P KuU8z5 n_5}cSg4Z8<-dIcy.+7ف54lQVts1Zel JRX8~ɞ'ځYh=g;`ckFM}eQ[λC;Z1,S^~qP"䭚gd.,1-]ɏ4߮2I!$6ψˤ%XVlBQ/{@^ɹAԲA1o˪8+0,I 31h$exРq9z=k,??K<=^>@t-ח ٣b&~`X E.| 6 Bx %IG<]mFLnZzRBi/lg+ 6pM6LC\-pY>,I hD/.rNǹӆ K;T"c=˷-YM-[wf$#_)Zxe.w GNfk ' UU!7Z촟I?bnv[)!LyC%bMs-OxЪCҤo=f 8c>:]j5Iҧ+\iaQqN'4)6o8LBQ]Ȝzu\txR3[.JoL z2ƾ~<wβhuP雡cĽs1w,RM<aP.jbM[dGݣ}&#Ka"N6#\ŅQ:Ns(n8k hJz$ŲMc]R]t׾_ɾu{s}F3RRSݨM%XQ%co;nNklSPz7fZ'S3 }R:qUw|L '@@qMnz}4;Fo(0!TIgkx?dU Uctmcs n۱ڞZQ>NN7lӂxW\>"\Ԧ j'_lv[y>4Y0B׳!Bvm% 6^k,{v}0+m$+M( pv/mNC {XAL1U~0eq\eӝbuXdkxߎo:!ъ̂WCLNrlm†6X1&T l<1(6.=uē{C!wk de;VLNzhfaږN,Ri8̣< j"M`gI*] lҿ|oˬe>* Xpho4~#ŎPk]~ `QŰnTe;=K3*{%ƕ_ 8.v?]4[ {7*5oxDqcSz5ACAh#hcLN;XPK qV=ư6AdJ~m@,* j?ȈTMF9t nCwȖϼcCg jicŴfUh ORGcRJ[oNN[֊8Zc0sx$}4/K+C@~]C?90Dδ*( Ze3V!H@CunL8Q5aR1l2AY.R'IZ"ۙI Jq(^՞nԓ O4Áy']ISD/ mD `ԑκ0N./W+n^k#g?:.Z%z_.rm=۠IpyM)CJoZU c'ˋ9ʦ=sY]7p* ṁ?ǾAwD\5q\ %?r7.=r&?Pܔ.G䭢J+wp8Vmz^Bd, P"pyJW3e 0[ E|&hx~a zr5rwȒTC?bgq25p1 itA`&VʨObJ"%Zyht}s^BZz;ۜcz8٨4"[4.F.OC$RKLH {E\ '>asuR5Z!&5'h$B1GL]v&gNey| nuU&jԿE(gmV=!vt֩ Q`6*3;ţq yBy92_>Rp9R$e=T}ѣgZ1pԿtT߹vZA/teb X,Q w4K[Rlw#sr~ bEߓC/FI+xzAr).Ө%[ꌗ0}!(Wv7E%49K$ g?=79tʗVp ɣ̲3$]IcgNV?>].1;1<;׿[ Mº}EdF9u|E6,VqaV>Z-Οk"c&\^rêJ PܙD*rLcSnG]ڕ1-Lا0<@&ZHw2/9! Yeu7#nd_RlKK1:0o'2/{v<-u䰢Oǫ ,t\BR(`≼z  dr̔@GC2׆ePnga ^iw:/(nBgFz' $=!KlA?,6V|6]F7M-DaDX"UL謾 eo |G14g/IHFZ ]w$XOZUp3B6<>zw(_(OL;X*=[_2|c„А)&cK|@ g2g\=7m3˦0NӱH2"bfQ=a_=1I= J; Tgne(CK훠8LNчv4ր,4]@4;!DYvʰ*]{2N:sΔLMp  Y]ŝ,?)rĸ= YZgd@cƐLε6KKI`1eO܃ ꒃeyޥnNo`PުHC}Y{X,O,&NYi®& Vi)^VSD7.5sF0,@%oWާHQp!dL3hɪ &[(,MBG5 Τ#q޶HeM\8}ZnHڊ2K%{!\?CPjeP]BCGxFkG^,ZC8Rʞn%7'zO,|\VTIeLԽ|n@d  }E#>;ʽI} Ufv5p(`}+V#':{i+^+e~MB4̧%d5y0 !0U6WPFS ^oi6 -36x> !NP 3rhfrB~I2~3sQH?`I}pjgP'@ouWKua֮J=˧2 7$o*.:"ҔV-L#W9{X/h(ۅ.%% pQ)Ͻ!,3Ȫ~EimACUiZ*41>"ysOͳ:s FHn5wSǗ{7)UOǶGLnA1y]ފ GpvM|U𿳙ϊX6:]uxZu!Yא \/|IlʏpHx`ɭ}TPr˿c~Epx4O_-nR ²ƶo] #o^JQA` `[:e$D(VyʠHW喖2]ϻ]ƌ!5oA3J_zDi8ɋwe~)]kUqwRiD x;P MܛZor<ğF߯NyXb:K ΃hv]$ "Dz֛JRON/@v<~-ݧQvl&b2'4"3&=s*^=TS!VPP֩4,ת6DuFCCA7&5-@MaTaÏu;r8~}ppΒ{CSj4|RdmO&E[=Aa|xю i=gQOcq\=?1q݁ !7y tv-У#/ 6$ 1g`LY7H?Pw:jɻD9S>~B-h 8.}%u{`0tfH?r}(DT&(1*Ǘ?FgkW,Ab4muՋ6y&S'{T9nSFyrwHȥ{](]ʽď' y(Z 3)ձȏ|J4dr7VR[al賂]^حf m-E "l5<ҾSW4/ySD"JK D2' qUÜX@A4M;pC?I[eOئޥ^%huIE䠖y慖v?P$Q:Z|cq,I$WL#n ʻz%9XR['HS] VyrZ, fN(˳5].,4z) PXyHFcT|#9b%7 3cΨ;Ѕ*ih@+{Ӹd&@:giIURc3UGOFv V'$3H$5irvjg]$}t.xEF%ki:*&ZӮ`=#>޹dJw9(CrW8JQrD߆ڎ~y'TSẌFtA҃]KtEf 'I?S0O2Iu^GJS<T{GR۫qQw9Wwdz͸d,o΄JXtWCx -h~vaef W-d ++[d;5 68v]a|:)h&wѝU,An'AMdj_C)\ .ka4繏"ǥ{fN褊/:x2x}wc|􁋶2)M2+%-FLOdkGA6? f(_,/ D_3 7ro|Yi5O`yl`sEHehX%uTo twG:Z:ņTay`~ڮB%|7L1iV8[;fϕLjy[+?hky@\Ziٞqi| zPPy]6%"jef4=зJ|liI.4~<|cn='e5b[ Ry>(4+rL<6C#/[ۖb lIUY\M0"Ba`5C 5})r'-u21{oR[o6^ͮ-?aNw؊3be/*^^vP1,y&fMF$KdJ0i+`A^a'mBLcGJ*б^ )/^ץeTʁ۹3(TAc>,[-kT (3Z1rq%6;gz,_^و1<tN/ޭbGB2+ ?;D~%j2;ϙC,1 5hT%߶荛CTB .tݟE*wpdMC m^EkXjH$Qrgeމ,L`J},sV~CKⳝI>R*{X}<[21Zyq퀍\q=u^f8F7alַKO_%*:*e'i2{ѫ`soe|MA4_6wkk,4r%Aq7INFJq]X-"RBG^]W0.:@O']Ҏ'4㖌¹cU6g3(|_3 Wh.A|~OҭlA_`+tHwîcJ&_V%,0ԐQYF#Y۽sDBi?D;/hi1+S'F ha@}&,)?arZ/ߠM9^YS]-Lŀ9hk#T+t2HTJ1 Y"SKl)t }y o %i*ֽۂ(%⒟kc%9v*/TL-֭lOǒrKWi*.8lfT6IQU1Dqx'OX7U7XH7lZ8I⎼Ӆ1_r8SQa8t$!2⻊!}fP} % 5d3˰cۚe+/ar(G1XÀ2; rjV۲%m#(n6d ( EBmnL3h]P]+'X_N*,lbuƏ$rKvE_Uڃ-D<'l'!v;BOJ[>xsy=oʊH ڳl:sgz7@tvWeN#e/Ij~SCM4;%Fip5lF,KgPk%æʖ;M,HZ%$Vb-L32^wQwkl^^5fk=!/uڂ|_LұH:#P9k)4ei+]\ډ<.c;c\^"NA~~/(8*Ãe  /{X4`)k3Е=%}7 4vv>f|P&Jۮ73yyrV++b9䤸 jJw~2Tut%lȅRتk` ׽|SvlsN_WԵK*9)_?haΦb:o`J ]t5 ZY^'CP^R#cP@+a% j:ϸlͪB%ˑ@e \&Py:sۺpQLHJG33u)kˁ-Ck=c줹KV&(L}~hzHI5ސN{^u 4xҪ~bJ߭_睊-93B-oߝg:j N *$4 JY焙AͼR O<k5l/48z, Lce3[ثn92vjmkz5qiEkfgQeV ˩t`dA~{-[O@^_:, 鶚eX)9 Eh3cTKE,P#zKY*$:g $Paes5gL S !ox`*59D~-Va0\ȡPhv"HC"=7+`L{kb&: Q yB.a? lHe?n} :T>OC[>  igTY P' ͵;3 {&ߔڌ(zr=˳̾?D R 1",쳂@iN^6 *gQs9/= ȐFXV^U4r/ D_@ RՖt]"^NWMs!䒗.&jh?c/ ,wڧ,OO6~&7:gYbNŪK-̊S*S؋)WUP]eaQKfeAe*+x? ֙?5PĢzi9sob~ӝK`q69V9(z!2 .` Fr~ %kC29s;/9X!Fe쵬}.q53 \0#9,l ]}YQx_Z vN;sL%.-{Ki*or$4:)!CNP6tҷ)W|eRA̱rC" @\&ϊ >TWhtFr;ub RDZ.?tnrRIUZf($)ʽ\Z1 {/\ LE6_b W <4 %d'ֲ.E!4T.$C}B$ ಳr%1mTOZA[!ndR;* \ h 1 葈By>[aM؂E kݥj>O "YZCZ# Y3_ȹ$ıf-bNKJ;ct8Y^jm6^BخR}jp S *V:s4 @!밻a4{ۢ|\t)&?ӶEe&1K#20o'?i z`Yۜ.vǁ XZv_1h)t'k! QɔT=z ){r`7(3 M1xE; ܛN ${4! jfuM,vx%.T| rD (ɲT YOApې8'|^Nqq/Z`2ݡ{2]. NJ:s8V8_*ru86pn$>߄x) f*) a !vs.9O>v+*bQAID-|gf\q3t!9mۑaYdH y?{b(:h#Z~i! bv>"2 <%;Q_tV5vGC/:vSkz%FчeQW`٫/WӬ8O[e  V#;K<^on 8 FՐj0[kI׌dm9n" ԏW9i; 8[Z@}@ mkB V)~)vT1vLv|#hk:urUJ^&\3s(hʫFcmTD{-qϨuEؤ^mFD3Cn2jaBBY<6~]0w@nX8H[Gx+ K.gIe49XfBP(DpzBC>yqGZBT@0N^/ YJ.Ad\dCG¬h2e%^O,Z;fPm+~8wY欯%ۃALZ)HN"P&B{!M.',HK!!Wl^)?r([VF_<<+ccUa5^Aq<Z aVvO[9|h0Ģ/4:FmK`wښ{JF塲_]|O-HŒj!6/No9;OwaRX/&,;I|F0Kn q!`𾼥`-J, n>l=!,A7]e,'%RpthH0BI#r)7`y5xl:E@R$ #&m}jS @mMo~>L/*kTDsαKoV=[d>:h"?\ _ɯŀżԩBx*skEWb&sa|R%oo FQ`1d1^ܣ9ߒ{k3M8|f Wh3}x~: ȅ1%\0T"Mx$9 .gMWJذa`9y"ZIJ|# 탖GB7^! Wl_i%=[Jt{-P܈& 1eS hC uǓӁ=nnHʪ u&V\5{#С`%GZs8yR'z_}M&4LL@ "voT9gig2<.ex}߲(a }@ MTEh0( C&D0 1CPH]rB+JZMIH $g *qtnGBnn0#vʯD^Z}p9ǨăʄRN\\} ǓWZ-"& wQ,Z4O |2?>,y, 6T>M`[?~oz%\{IWY%*;/9WU{ m K_:N}T9aP0fmZKf)9hI5 "/csQJhs"8LˇtlDjs&A]D" Px \ ZgWE"JWjlH,vxyI„,KCpOOQv6rdaHL z+TO+fm >&1(S38o.ԟ:yF X&7g1h9d8'v;F/ayha0vX11A *;BCUi@Q(tp'o7zk/I[dd?j $9/sӥ T HQigh@hԷudjdR†|GïP7bkU|w!sW3k7YL u )v U`.ciu}&UYw]#ΐ廗I_{xOijN+|0 :$?s=  'خ$֡WT|w<&]O%_)vqV͐gKQay wH橑\7QGؔuX:ïthk丹`hp3ͭkgkh ٪ c:UJivxfT:Eᚬ֡_O)03L]B;`*S9#k ]79hKfڢZsEN/87iS:&W;;O07@KzoV/_R_-m\E!e[JwQWW}EaVn MqUCŰ5./C+#3}euG*(48~HZa8!ݼ3["JJz15|`38DWGW?u[%k{i<ԳF'Bz&+hqPO6X8&3kZ?̭չjc6~nLE;[%xGBW"+5-[@Q)>j:JLYh$qM֯]fJ T. X :ySPrn:A*B[kO>bk.|262#'!: 6҈{KA7x,GUR4L6e֔OQAwo O jCt BK,85o ,mw#Kn zmRIaUp;l.oتÆ.lmQ)Fd&TsLyaܿ#_*04V.'8{竵05#ix;ȢrAXRO:wr:H4j%2xgXb߅ԑ#suB'IU <:NTUvT %tOĹjzƓLĮtev>[`IVL%f;4L t'@9R؆۪fxqrA :ͳA)n=80[mDbFU#^ -+ @ҏpqHm*>Ӧ$,XH@׋=E zD#5gi֊o4.?Pws1JA^XA< /})vč^[E cA?aǢw.uBrow e\ ^G!yҔ*5g63|Ŕ[(O8\x%zځ]QjOCl$/҇l9+sϪ VTp\qq =X %85}mɞ8}HKKڄ^1:2Ux%OkCɁ.5L0 m":r+L!%oəfŠL׾2.4rEp*fF ŻBuӟ.3qԦS ~g'K],OVQUpx\#z3EV \ϟ\㋉Gb9!!-29TmB!z!ȫf$PQܚ_9ޱc<#:C2sso3p ^:ZtZv` d@M~6P`zQx3!W{/C½ 2wOLllow@Ɲp͘Gt3jot7͈pD dk|;E V4nWP$bat}vZWiJJ-޸Zp$xv8W)%0.-p&D~ Ҧ"q"k R+ <#,4je;yn87q{XY WMjLN궻rδf. f&iE$mu} pl{R춼C*T4򖱣u"¿> [o1\J6!Ixn ϭ˴p\ya0CmOg;-E=uN#pAhʔj!FW&¢/Gs#yIim1Po RTՊۤ8\iV2 ;L*Z蟕|S .7#n04RT=Vgwi&PWķg'rfT8_vZO(JIމl? 8t<1\>΄{xgMmKb_V? J^ /`iSpGKK'2Erh!>(~7jT_5O:yaf-,7O :<75d(ߓDӫ,vАxvw^=)LѪw[;9F%0A]&VD=*iaҞ2+.p x*UۄdP vDl'J:Xȶ6_jzx`m. ʱTkP-W{u/}cuvWI- $f&5>Px 6$@U x۫;e3MU6qe(&lGXRkB|;z[vRdhCDaZ)GL:J@QRr4! qVh#zIJ!#WxWuH*C[?k\0<נ4yVʵ}9l5SHj,> &J-яҎq2,31*?@J\?kG"m{A3Z_׏UDΔAiHR7{݄%O3c7ѫ$@HNWHV=Xbc]]8L1р٘;x&(\2Gh{l&V0B#zp\\ Ri/PqN9FO |?-Av1] :ѓ>'zDӴR/+2Д"Y@T'k. av:?l-mĠnڹmfFiLgP2~ێyJkRZEq%!mVRNVS٬Z+3韀B*E@NWɱL.AձbTj'DҲVEʫ;[ YG$oq&6{) A("Aj~@`e)J `{C >4 J I#0H bW؇pMf[vӒ|f&O3[FA9mǛ'sN5bU-)e@9Vߒ&ryFd]2 ke@*ϫWwOMVyW%xF=ʏlYUYl^lF.C=_5?{YN*~~x!N+c^o(nG3Qri4#zS'F+mŒ9EFjKH?-hթq6) op^8Ƭva{W?H$22Gd taP>mE(v]1kQ{ ӊalK a,PysfwI;e'RLW1I̅lu36uBrUݱ_s6ӈxDGZDo^B-eEOE(cfقRqJ8-+[-NXɅ.K<`cMkgt^GS-#S'¿Wad4+Ÿ:SYpY9nEMfK"z̓|% gx cIɘ(Z~kޡgHER'1@'NkZ@ JH'MG?6S.^&?zjwT/*q܄d&{DX:̅!$Ƒ=K"B[{5mHP h.[aRkkimjwjni@1W[! xҹ|KL]n^b?F" lFv=ަ/ZrP]b.q  ٠LF5+TQL55\HZ 6Ӻ\_;*!]Weң"Q:1B +DvmKO~08ݧA _#HƬ}BmP^񣈯L}աjdzUhw$_\?YH{?8FK4iql(ϕ%%EےVzqpVOC(@ 1kBz8V DBy.=.&QLED'Y,4KERi%& ս/1o0UKDgaI>N8c2+06pN9O閄XXOP{8i!HqjEi6P5 #E8nԱ)n* heNn%S"Xu1..b\+=MW&eujKbrd1}]w\)8YHWw {R|9҈黙4F1.qvdĞem 1t RjOQ 2r2'ҳ] č,p\YYךEH:S ]stSh:x3v8_6ƽzbNyedLdbݜ"2xO]9Н| *)@A 6T[UD5cg3D5JAnQOs.a<9~a>KX>`#Q?ң.e rZs; DQ*IZWaPe׾0voTOpEDGpvNcn&$2lgh79)k̐~3ɟX'u#W줉c?EaZUn.< la\Xq ;:v $iOH1TJZڤ Ix '7rDhAw1Ȫ|_*$Q;l=`GGgK\!~*i&(|B/4|t 9S;&UHv5"0,rokG MaȹQ%%֜ow98u'OkVt~'Gi?ui0N: l gz:JHFPl^?#?4!Q8xPG5ŬvBT H_=l3v4_ͤOѠG;NFqrA"uOlg!¥{oȔ t0R*q(l*ӻ/;+PᎽ ڬjM#v@Ȓ93c.pc% oBUK̠,&?ȋS[e^қyX11O{[Ap"u"=BDT.3'BC3[yL=cFK5{_5@Clv))+31?5uunj @oCN`,!N7!xJ Mʫ& -$,O:eCWYqLn`^%5AⳀZ؛.ߔ t+ 2z@Crq4[#J~Eq>${>D[bG|RqS Uћ=L/E>0+εQ`NKR*V@R22.%g1Bf'-`mzCb"iw_ّzԞ.u[x.`bmUdG(A%+,b!@&<4V.'sY`A GjUNno8o!N*4*NۿhgmNw}ePzJ{ BDM;nJv 求h?r{jգ01^T4:!K<mwX^H9Ǧ)(ojʼnsFo,vV~l?_B诏Z7A Vp|}8bVPǚ{ogq&ͿηNaH,ejնƚ4< kPIuB(q*0DPYAtľckS'|4ލ[Ų$r.y2Be)_ swx)l; <9\@q ۩+{~2H9)tN6lv`3b4 R}3P8~5EB(ÿ=9؈"Dx6}E6lV6KDwCoĤ}?OS!g]PsYopD5""]@r34+ɱf 荶pqͫah\?y!8֓w˜ ocXTԍ aG睁WG2IoӠ|~c$=k(_QI!Ƞܤz*+Jc ̐9DH৩h:]ҥԎuV ;1df%cGr WwUjm>^ӪJ55ГφakUh A]`GlP~'aUnUwx4 /~_L )]( h8YM!}8 |הJ@ ST'b ْЬ,'HnM'|02f6 Q ,J)^8$ u*l)]lֆ5U =L~xRө Hv~o2>j\[%(y*8qml|;r6AZ%T^~_5&!s -N)Q;ȟuua@EbH"֤ v3LPgJ Orj:7"8"K͒Xáë+.fGUo'81j?Wg|DY>F>39}D859"W ~"~[uA~qIuB&2@[sjc!m5MZ̍b'Ms7VJ[τLMjLAWT@73l ,p +6ݪu mf֨F4kI`+IeCQHu);F9"mݟ`X,6ZNrœh#^g}"lP&_/~}b5fsOlx?hp椙۷l$~Wʨ<}ozvh CB\pA߆]Y:}:jPI279Tgw3"斣 R˥k~m#Q3\\"qEq3FfUJ[`  i^7q(8ZQiϯ.fM(x0A]Ͱ*g72bPm6Čk\sN>H4ſk"\e©w|Wa `4`5K_lG HJ}8jOQŔ r&%ܳԧ`nύ*ش'Gﴍ8}gv ʤ+K9)p+-2dV )1s(yE3R?1BFTk׶:"XnD@R/zw@BXJJYd_zZ%vC*Pz׭VպK\=R{ oV*o񵘚Hڹ/jO͈b ;՘캽T)6|sNt4k cBr:삾 ͇( z^( t?j (U\EGfK_ ge.!+b~j/ i!}Pg@lnz.We[p5U@b8qt' kM[xI03h o8O4bkObO4{ԀFmH8).e.뼂ɏ&^C.m k%R@/,Q҄*<0?S*~%FУhH90pt46]Кi@VP#>qP>6!btCPO͚'Q~ѧ t kfMGr4RmQ!ѭ:X8}y+x"⫐rvsoB4'x7IT5ll2 S ӏL@&;|Pv+>rv-N .iIPv/UʨI͙,y4ElTh'a H3޼AR+IjpALFRIq{x}7t55X#L [5hFfMtݧxE$jCnh]b_dBmbПC\ L/"gL>B9q>W 5}wS6 ڿj[SY"X$s4֑| Jx7{^@DIg.`b6͇\]bö bUN ݷz DWv9dH?MBܢ y0M,ovxq,>OPaoΆ$G.aewtvFbGFO_ z4K)Q__(6eIsF~ ^"q>񟒵ёY;F$ FBqR4ļ%R<`~1r؍kdH?G6L^ d"W"BO<|3R|/Y9_53Tj9-gGP ȝeaLrTvΚzQԔ&VPk+G$lB6OeՎq<t(*\$ZGhW4I*WW\5"Q bqڐˋ-%MBҚglWrWʼnn΋x2@wz5)υpLRzUQR yi, ?vEoaEf}W_j(?K 'kmF1BvYWNb޿<3UY3,*CMo O# p .i&GH*Pݫ.gZ.K]JŴ{kWqԆ\dS-ޜ @xyS~yk,,*@s@轥'<)t' O-{/cCr}} qIg >̡✳MˊLxT,조O\~fE]&PĻ/dq>O/ p9LyJ Ewo"c2 lW[>-iq"d[#;BG~R2ZfWz0e /PeZ(x};DؕOVMe,JN4,2 Mv0jJ?i(1-dhabmwfr-h27WjS% |59IX\ ݼV];aMX4I3^΢Y 8zOEua4lSBjQB#3 JTSw>݉*0uQ RvZ[+ng'4|3HFB _mOD8ݢE<Lp?dpᴙB6{ Q*Q_PeaVS]U+ 1"Kh=mlzڦ+jafUEqd3.{86}~.֤ LU&Rmi@PYڭWfU3uxIoZb0*y{Eub2;K=Ѳ)3PQɷ1{:uޓ\u|^eu;{a;U/FB'YI@%䝇(.ZH9%+{9D_MF?Bͦx! g.{N+\Ip=S[£ض<y|þP\Fĺa(ivH?SCncGn/܅~ܫg˝xɞ6G>&ؒ?XG-#myv=<^8\a:ح%:04hzR[9 ÷D4&oowɡ*#a; 8xn뒽$zLGiނ :RB\|,S]^ḩɴ|+ᧀ\='ܪ+TcK34X1ufOM>@Gz+6c+Ҟ/wyK+CUx5'EI1*{g]qgq.GJ&cvBfY@hV@n7%Qj٭ww+=]l%^FGx* >@Zd`Xƞ̓N__u K :q%̄cW5l?u9CQ|qNju]K ٍ2SlEXr ! 0r~EGpLdNcaЉw))sȣx)GLf_).enMEl?P秃4J.I׍LrfJC =jҞf4 R}rj#>63 pfWZ!{Ap0.Zsi[I\Xdg9fPHiux2@5sA9W>_{t}y0Nnf9!"~\EX9a!ANYK*]_e8F`qޑ6ޭlZq p3d$^5ĚWMvF FftMy|x7>LcXO D}4Ahـ72Eɤk3Dj޻;9fK^Aqa7=NR>$-@Iqht5K-†<*lp@^~T({?ܭ@L|А`sl>hV~~6wOT]_1 ՠ:NfMf@Ù` 뒟O6.eҁscψZhܡhGҜ9DXm[Hn.^} BY:\+I"%&7  d0#7׽S \zi0|e8>͏]K">[z)-`gaT[&Ssj5$.ta ( r$)< IF;b(oCbH+Rۺd&fJ~PVN &fIBumhjzޫpDWzaN4BV8{D؟_mҮ56>Z u~_Czc ru$PC SVGXW|^H0{l&l/Y!D~ ’9D*Lθ%c``c.zog$I,D _f9XJ@TJ=IR YwPqԵ8VOk-*pS`WڊKASGf*weLLi$%!@$kPɍ_MlK5}TEL9br?kK0-wQC5ƔZ9 7ov 8WB EBFgd 2U&7 ֵm*bсqJ$kK*vfOOe&M4#󣆉=%]B橻u:v5Vj2"AQ-p,*d  Y+5I}6Xzc}zQ8v|}9apkG#HuB\Dmyw˿, t9+ܡpX>-CX+?ܢ/7{ \20Ț6k'Khi`zUp=L/ߡL}L5D7&+jٺ0 `Y 9 {#\0;!׳×ԫ>ril?+ S"yqo-m,^'07rV|76ݦ?(|ӥv}1KYgy(;\EDW[]T4o:3^ämNAGc4z2%)؂&^ .6N¬! @h<͊3E00C4`BAJ4 ŪT@.gUS(QHӉ3OGMu\97D9ԂeX3j+5>ӌ"̻22zù[mB5"hGI,'BʨUJ]Ԯ5ySl{}Zo)fE!VER~6k%<]DWXIp(tP0ab1A}s'f5Nd1*S)}*ª}ʼnj9ZosQa?OY:v;i!U00Rd7QsYɚr4FFmT/ >B~=8o Y jzW !-0U3,zlcҒL,]8pW1 yb&E]fиj!5qjq[돮J:qvъ})+k4UdT֥[0; 78}ktR6(utJ!!Ws/hFMUsJ lԓ#*Ӷ)6c֘}647{¹B[ݲsfPԦ3ļt/dȚ R)K:*5eu]狦~)Bxq[2Sl "$elg͡%\Z(H3<~s4Ҟ 6F;(~`H{Kgb~SW`y1O}N7 i"X{tZ͌+G0')*ٝf7qZA I9վU.S낻zsބpdcK69]c_9NjISb]O6u869Jj5eֈ0D=G(ΐhp+S'$s2цX~ySєd^jJM4ekdWF=R5eYRۨä949c6IG uڳW#fB w壘"?1zH*&7尡ƽe8(B2Mg=qc)^{-$Zw@xB,{r[ui \Wri5p$<*+ۡ-+d0u#ik&>j7>ܕILyE|٧Xƃ{X־2A*U"RKPH\$,0ءOuciᩎ:3 }zz|)l ʿ!m]IhD 'uD~a~[4馹Qm&mqjOwi pK~FQ>~µxv2E[Zr[VB%;j9:ۧb`P;U LS_g^ .xkɰYT6G^?;j?<'~<̶rל?)FY<ٕkl_ClũݼN!v !ЕlRt /5DH0`Ss#Ԡ[G?Ih$Ao/%9IT*%sB_=L Ǒֳej42O:H0[0*ʛnH|T5I'56K󇤸2StM%rܻ<"D%(ګe$(Wr9­ [{3 Q*x“&aHizXQ,:jQHNt?`V%AC=-'}WWat 6#Ŕ}.߶S9D6㫒|#L-+!0uDCWUx})V[bN(7ޮjE3H2DFcA\7vXxu|GOVWoǷ:W+'oܒTcv#,!Z?qa/Vf0Xn׮xOoqݯ+%f&Z&Z+q@af@i>@ܓ0.|, 7dBcƬ>wԀ;Nv$kR4@S(VwK/xnxh`YY8B#lnExmp6G`;E戂}Q;ljh&g1ծD1_ǝS< nWU=Hly@C(6nK^^GE\"yM:l75à+\bk&WYWit;.1v`0~Und*+CY <;` FU'ڻ\Tю3Cq&az^0Rw_}Pn/=RTB;qY[I9yhLjp#xTޢIi~:@4hFoq#3(]TI插RI)[&ۼ59=0rJ֊t#ĸBNŻ<` u~Xv!?oZmj%5? _P)XA(Vma̘.Fk^LFm.uq1}`;\Gy&V3x VDDhz{zY!Izq!L2i6SI }ïpn|sV#"R)BxDT] inFM Y^!~-DGGqG!@Id0 g_>ϟqϼ- kevY/^{mXo^aŕJp)ܶYRJ۴v?ңh*:P}*Ȕe-f!Dir& `p1aN𣷡 Njȣ{"5 *?O@SOOӑ&X>>Xՙ.@fѿp]n!ъU\Aڿk;HRmR{,ˁ_rf'Jju3x`ɒTp"|7?>}R0\V|V"' NȂ>eTpK~Q#\oO'ЅBҬӆR}:zvTHE#KLCK0ͯh\1|imT? jѝ9K90z&;r2~[xb 6Xi44.a XL5S'ZZ-N;q5Fipl) e*·3Gf@Qt,ܞkȎa 1EߪۻJo267 s3 ]:->ӃL5 n!5Iri*VYԴYjcE^¯.}`FVsCǖ;C[1?vXo!"m#X!|/O:T,9OdE*cDnYB_uLQxu"7Yt2@U3JMZI،2ۑ#w+30F#wv=x#6}o) ~.'X /р>w2_4eOnlg88uۢ8.U:+ER5 $n6QA9˜P˥a%>#*/] ]T\6wusv!@]G Qk?m TXu*& kZŒs$_[^>{0 }[)+;9sLi~EIC eh|B*< nQ:pڏwz~1tDzh yW\mfiA|d>f8@}Xyld_sG8wEX$yHlE A#ppݻ*޴AV6;zm;0^e޴"͍*Mi䠰ɫH*Ő{|P9ң?:N޴JJA,#e6- }_DBd 5r@5wIOm -_XR@vF$= 4:Tջ}D}d i1 ԣgqn5:2:3&ja>A0gԝ |^-ڨ-mc|A4 Mhd{Ƨb*Ty J E67J`} .{@ .v9񌞺2`B kz)p"jjMst/ztV͐LJhNͲEU RJn{1HBAerVLP26jq1OHV1QP3[&nS9ZL#?k2;B&-ѵWrq+Fz2 g7z+xX.x&?&9'aOzGte?atw ԏ-R?1{!m+AcX/ %n8!Ezkӫ1&5"Cr#bf- {d E2s}?~Piq)vnz(u%g!0aP iF;#E&Huω6 UL*b.J1~`cZ .}Ԡs4RFx!,kzYt%NQsk46Xњ^R=Vhu6~,^֦7l/1I& aknO/5#R.IS찃kգsq̊9z> c n[rUIrCCLO!hǨ8aI؋=/> P;svQa>6} pF~A7oX1}N6FeX|&T P`FnϛP"9DoבHϒ:$ul` 2I$+{uFRן4G2~/ -PwУ%ً&QԈn.&nS77@O"=MBO'LeGJ;Gpb}6/ "ңj J˕1, ,nRAy#rZUNxP?K ++jH0|bM*m`m z+딲2DqJI-&Wuw\^N(6uNy` W`Ϙ &:?pk`,.lăk, #[3~ ƚ3%bo>SAO\6-ByPI CNoRC{q.H;V#;9EzQ+K sNO+>J#2, y7 CE%Yda 3>I$oEViIrHJ3ӏLx&& 2Kͻ K:hKE+zFt[.y)(O&ty QvE=)RB{ѾpNck/6&d2>踞\LEޮ@MZ%X[ܦ0ugʂv.Zb٠z_Wi89gDUu_)eoX`CtZy4h(&Vm$ r~>3j !Q)lYf1"tj`)g$Xj9{'q)'Jб f2iaJнM¢n5G$] C6C*VxWW;:o5#ɃvCoRX';7/R_"Ι2[)ũuiбD<>j\fy۔ kbwjj& S>GxQƏLZsWd;l$ʱb+D3IM?XFrE1\{Z@8$aO77dߔtc#p4Ї)fTj,| f1K5# *uu1D7S,B8l#l*,+"xaF{)qF b5nQ>&~]i '*#|"e *PBұǜE]=Xtr-˧8O88VplF7(2ہYĥm~#`eiN.#ΖZV?O)P{Pflr<3k`q|,$4i nï\qO׺h,p ^CEC۸u>}aB !3,vJ60Qb ( Ȇ{*/z:Zfd>"6&Ļna\SM?FƇHUz4j:LPkBiEs'8y^-:8%j' eUijAI4yf|UA(t pc-mzwhHdiٷMYʥ=!)ΉM@&V#d҉MxAas[0N+hW4z~~H y@jvE{D/1wmI,n:9\S$Vbq[&prFgFYB݇V+jU!|Vu%$1d%qX+GE; ӰgP=jPTG._nU^9'p+Yu݋QBB:|UFSGTTa{K|T\{{_ґǦyarI(N}&*9P(@* [v@oʖkRkwӟ1dJ.\ Nڑऌ8/pY[upϯFb􇣾87$.QZmqZ[/a.UNecKK3th4~iYA;5Ctݥ%Ү߲م|i4gb΍P3R h@:7lv?Yҷ_9PRUFE9@M֊@=h]h BSawg1<%w q,#wUu1RJ'r@J hf9i/(5֐/a9mJ_EԮ#K3{gnEm>K0ÊeL&x*.+ W:d,H2z]̫6 RɞXvPUb'.(0ƒߎmIY XobB2 ;^X%X &թo3uЯe"]'V<ɱP{o ߈t%o%_'4 --V`i⨭JS^LoJ\"%v(( R} 49hyM@Ml3-&7g2דB4;ݓ9QxeryseI!w'MqPh(C0%ﯸ|ڂ i%%zdz`V]&Mu\X0i#\>Ӟ<+\ p‰=8xg ȋVn0&gTEb8>/nY&6<#u."Pu}`/ %"B"R2ӱ4|vJW(!*>g..B~wwٜE (LpۃA J[/odz@Wƕj Aaҷ0WzǬL}IUݝ!0RÃcRvI+.1&ຨUt=NƔc{`a$,Lym+>v=wyF>*$ J?<=hWT*6`M; J$A~!(O~ۋ 4EҜMYf퀌?ebzdpY_4 $?[tܡ [lb oJcǾؕ m_/y +]7˽Ç1g!5QYKJv,9A>*2#VSgef}i u~t#!SLA̻VfcuX{1׿-{| O!R +KG`/$dAD)u} Cn~'$l$0n=aJՉaׂjHn S/ LWׅ)X;ܗ)dQg؇~̞2Ul5e梼O-\Zh)1&47l|8VM4Uc3ܳiTgFd/URί|:7׬1l a#u`t0WP6҅>ھ* [;Հ?4>嚉.{ArWOJ%vYQ2x sY\ bQ|cTԆĔWG tjf&c-u]!-[9ݥkn b¤X`\:OF,C|Ҵj8yt~e*ge\ - ᚜D%s Ug&]¢|? ݡ ʇ>Zd'MUy4XB-mjvq|YeC_Dbg[ 1҈Rf駝09^Y'Fk<łLh騕9BI(x'ff_P:B7:QlFm BКn_JHj }B!F-?מfȑSZ(<5{4 +ѹƭ7 b 53CYKzA+v 68cjJE[[rl}nI&-bFVXYE*1hi!sr5Ĩ;ฎ0@c;H DBtyVn&ھؤX=U(q4pO'jN  #VKQ/ЗX gwNZ>Wt Fu%r5+z/f,2Ю#0a1A\PΑ 4SKEX;P$O2 :+ !2nXk/;{v\9V 2![ |Q8&Nb(C]Зjvc .;OTm>+~{1c%6/EO[7M*W:-!ěuQgS42azNv#o9YVp|.MZhg21f(JxpHN7l1%Gk#M/\÷ &nF|.C۵/@)Oa' #,3dQ+Wһe8e8+'a.ުGan&-yB!G?M*܌K}E앉l>fGm80Hn82h0({|Q`գ5nyT(:= 7 VBu:rPPF kb ˽~Hf1 ^~t e+D-0W ix3RՅY۩hXoB{L897IvB$K~l109t\]v|'J>ͯ/3Z~I. pm(|-XfF-[|G-]vDL]Ƒù]K}o}6Hçjډsl o\j[}Sd?1/18 ۬\ɩt]F|\+7<:^v`5_;G(>N$aEJ P8zNKw ftKDMKϘ ˳RQayB.,%օvd]rZ/80 l;$Y<ҹwոnNYYP~i& `k~JdU܁nXH$P0NFw!fC5@ݾhV>˶ډV7!iM8sTNa[ %2`P`2nAkLcTN4 \qJHOn]r|31uÔ|x gY?JYSw 6msnC߈[rr5]vE3or t'GтDTNI aJwrUѝyG/^}VA5T-&`C u7m+XA +kơWy{q`1g3k Gƀ {j%7 ޛa2`2wF2~yVJPEO]2ֱ;ˊDi%aS/y'n* =7zY(̓vMs] ]{ot3+&^@XBrͨSE,}taD9qm[*JԤ'ݭ+= I9%Mρ]z]C->ZpS胤LOĶcX5]C*iU'LoJ,:'=Y/g[ X|G"MȃtR# XARřJ a(?Ӷ(X6v>tgړ.ݰd}܇b~dvj09%B0CDNkeG{sP"/Q `ga-1u zp/ТFg48yN \rb,'>fvresÛP|]c suPC1ڜ3&KU,KEqZl!UY:SnтZdI$ rsJ@LTq{euUH槥Tp 6VЋ@(rr98L E -x[i`OoO>q@۳8+@YG~>곱_ :sC|;ٷyn 9RZ`"5Q'jm\@kќe7$.a;'/ܗܡ6QOXsD -Gn_F9=Q)OR8Z1Ì4\* 5-uVԂPFoB{@A8*LƔ[?E5d Jʬ6Z/=$3<w #QpWOK]^}AYʯog.?>:cStdΝ 7-R1gɉ-*ȷbZR4:r׊aY&5Nhfu)p w?TΏ$ȍH罫{e.niyf;2g^1OCBc6פ}N44%юdL?#ʞΑQW{S7vW-zvV%6 iph\aM|Rs)?foUu6ekN:hi\ &gKaCnh;ﲏLCգҽ\}zТzA_`FNҮGU&vӟ/N^RT2AMJu;$b:@ܮ'Mf-[|]Zm:*^YejJngX1ϬcRc>[_05-HF2wI\+m{PAlw'xT{*<<Ի&whϰ1Ɲ50.θ[10!Rܜ&z֧|*ƴ°3 \ke^B.T3%}x6;+yCGIkI PO݂C_geUTA#~[ޕP ˘2ANj_ߴ}":q ꄶNU6XkCz<)d#ׄ}u`#:#UրqPVzΗY8(>ݜr|tltNY)솹 (\g4ks0]1cK/ E#{64 ȣht8cl)ZvpO? cT|ۻH #5IہCR~2 U9Ks6F0ns|Y֌)l{=5z2x6 CM 6͈ڞ|콼XP43auPQ? H,r_g<=>)l@4iÛ {nChH'5 qɘHm>q9bKWYC1&TW Io7[X1;mBn8H}F wܙ3¢Q2^k\UEx-oKD,)!r)k1޸}n_QDNQX0 :ޏ% W lnV-{Hg/{^ W3TyCUQ YvY7CO[ݺ`6/R95y/mb_UԑǑ%0$'L=ת2S0jiؙh>F7C9zκE?W?-Otm~g-xpcE^Ԝ+ }rD$]ߚ]RZ}w uT7JCGKmJ ;1 YYP놪U&*ꆵMhp03 0]=zXP:$R  02ڮO9.ՐړcD2ߪKfIR!(hpPp7|^fm;,@MEyWgܣsf'G5,rZ94*AS>Ϯ[$f<5?b̅i٢ Pʲ`V2(vMpb![aw:۠HtlHZ|OÈфx-a06EfdFMGTWl" %qz$szrK ?܏v.:Jkq5?W4w>ԥĽֳfu׫o&W,oi W^ =|d-O8At+W7jU"+r;GDgB6#GX%lOYkV *OG`Eqw<@i^>#Yd;fA ֮i?\ʴ?r*ѽwc>wn"ItsH:C m\ʀI6ip`g)Gq79qa3r+va6xE6O*NPqhrYQ?&Ŗ˯+Fqzwx~ =|XF  8hͷ7te(8+$!eY[O2M܆żϳK63yN^ &Ku=V#}l{ҳmuE>\fBYdV)W׻,2>С55|n#HIy&DCg]+zoRwPrZԙK>Mo!1?rBMX1JxQ}fHߏy,ma4 z%0Adey 79maWK7_߾aJa!忥u*nZ.3UocKΠ|hQe-Y*foi"LW>XĚxB/_e=FA,l#0ҷh {6m9B-us6YOTɹ厤2DHhyMe.'72"Pa OHRj*_geuZ =`lHG;04tUҟHB5TNRg!LfhζyT`Rb#{G\-9>wdVU/'g$0hPJp3fr k~f1r(+mR$X]=̎ATPEUH<;̫>[M bljE O]l"Ϟ%A$^wf^ uSvbdǡ\0k_$/L.%l5p< r5gJ)Wb YEJBoTMX]r7)$R갢 ԫO2׶l{IbʎB6N"CՖ k,)"eSptwV2 Լ]; |4%xͅBZAYRrJmǖ7úGF`i+ɥۂpi^uF$ZQB[XJ}#&e0/I <>EoU&b ?ˠIP2ڃۢ+(?mZY9DKONBF+^R K?V $o'%K:5EmyݸdhԩTU:6:}蠻 $m,-pbݞʕ|%auH ͂JZ#u0wHcRGlKʺ+HJDXҠ*D`/n{`Gi\!@ZVy IA4QVS-&+W5Յҙ)+0A5pJJb:iś't*? \ `IP`6%dzFuv򲷇{dr$迋oJxXP7T=g"4^"L`)!LjBﹹS{?쯥u"wE^jD8v8&j9f 6iv\uvVg,Y'l6P|bCh=2/kVLOL͆2#q7! N >)"GO'%5{-PFY sbH.IWHX>Y *I!חQ(r^ߵIf1qjŁ =sܬ|vYc3|g;DG1Qڲ6:Lϋv)n@vFww~"L{' h;+T9!x"Z5|uoU!EgY1(br_xT8p4k"""-6'yf(_p'H ɺR,-QN5/6]bo. 7b$waX5h(v^tP IYi ׬ݷ \{tv,Ljm'ck8H]-l4I9G/XQڋ,^oX:f:1%k CpT* wv7vbK aG!q}G;hL"ɔt?3J yԶPw]8)k9<3f{H!feۦpٻ#qa`!. cj"忄G NLJʈ~F$R\F\!W8Yi^CԹv=Qkd.}jUtEF*eb_`cErND??%J:nYmA#-6A" gT'|=<1lLwБ;ilݶpC ҁEY{PW69Dks\ ^bXʹ-9 h15s4F($+k_^K/CyȨpx!,&3Ĕڰ4ă?k/qi? V.aǻtO1 xFjSTGJpǤXKRN#d)C?_kp7uyyqe [ `'՝ؑN & IP5j8nBTsɦd b席KQ1RJ )lo `jC8F :0=6v-egbw6JTsTr GXǹEԹ[4} 5OY@D~.mduAiMhā"{DVf&K{%C&8Jb\'NߎVlsՇƅ"|Tk7je#<)=&'T{XN9Ga t8K(6S_73B*8uLL.0O~!^I-x!AyN7 ̿ȼ}gfp[*g(ZbqXJ˞=% !2:iGnlдN!S|3< 9ddwRˊ5tlt /{qq ؠl+A#oذN 3^%&|/<0{X|u{DoW_GTܥ=oWytBE'q}/MR1%`?!$Z}~}԰.i*  qT9 }MӪs7eb#W ;!TWrӠ1QʈA=]gNt?lN1 O}XÌ-4/gt f[F?-sdm>6}wZd$ߎ*O%Ĥ7p!%"k#S6V94ls2^ZPCj++r~W&2p7+tYpz/X-8 3%_Xڦᙏ~ (eCqx8),c)<,-?>PH)ZJˬnӁ(ܨ-j2EtGhu5KoIgeI]9[Q !NMȅHWɖ7>t{J^06 i}bKI*,P&* L읓XGhCňxqbL,?ex_ z|F !ZXW1nYK瑙oFq⥴SO\ZAhKG:߆STGQ4Bp@&rH@PBc1#H1D)6K@>`+t `}Uo3OZ NH)(6ᲤSMH([wrUfBk}sʴ@UcI.ZM:xŔ9e\ 5X:dt?ZTZ$f'ٯұe{Ye #I> zK=='`r M,BDR+z'@"ו*nRdQizVDmT`P M6#̨ g_z[cEH( DaGp;>,ai $f'}4y4RF+ky?CiR~yO˙;}qH* Z=/ 4_e>u7\ ȈQQ M?qO69of3HcId8x= )/8*>F vi ;x3WG'4O?IC!Q^n-Lծ.GrAyji2o,N~?jw![_JT M"/ RP>, Q\ݢߘ[? Z}R*1/GGi2/c ;dՈ> P: ¾, ?"{i'ӇLi`vt$Ȩ3|⑂^zb^PMCL'Z,I % tJLl0 ڜxXcP:S(j"-f!Ж(C&?`ZfI."`Pk;P厮 Nu] y&8ah"!&M/}[ǘvo+Qc'@[TG+蟄VB*=o?taơ!}g4(]&:B` ~؏[v?4 Mȡz_{+ҟyI;`B4f}a4=I?~U=)Ltm4>gFY,9NT-,"0Ko:ۖۡRMs{v$"zz xr-+0^{Z O^ {8wC؜!q'"OثrJt 1z { !]g(wh&!!/6ROA VC5Ֆg0)WI+s~6gIf'Nt{#6l`bh2 <",-6Ps[&QX01:^,/Xp= gCM ܻIRMT[A$c=t/aq0UFOQcĒAvDo>pyަ {Lm!iTVGQ6v(6hMRz X]45`e5]S`iPyDb,Fhq%Q}v4(jAJ^Twsv6jF6NE`ȩ^s~8NL7BJļuA;oH4 ֽ[M,Bʼz8P7LϔΡVj-i!+ll9;i^s v)3.^wkaP(QB ) 1OX_2 e ζJ||P4R(g`?n6)0%^Y]o4|`Aڸ%45(Eà?fȎ!fm$ P,?~N /Xŧ6"s#1؇&Y.U|bocDhaST9Nėb]ɫU!xR1Y4~G:hݓ[[vWP$g-u^4rQ J+P\ĝ[iaIN"J8b$tVX,6YE ESP'!_N.T۱fMwztaU)ToD9BQlؔ0+ĵnUĕ?2)s}v/TkA2bc""JUt5?-A]u RF?V 0.="E=_oSmYSuiH"#g"E73vyϰޯp 5Wؚ n+D` ₳Z F% LE&(]+ G*9zTW` ^2]Tj&T -AW=RRR7&Qy7Qѫ]y$>2FR޻oT1{-h Ș.^fPԺŭx[<\Z7.@1gh3}>dfu+$j ֹOÀNyPKnfO5([| n\t^5΅PO>xM=g (MmD%:YvJ dU-0'*Y|'&-wY>(BuUxsn(5(q~rVD7e }O_ZÏËnT# ;'Gm+t+4a;:05DAa5i"Ֆ35Re1ЙpwdA1lҷ;+ 3pp7W+Ү=~rO~+_1y<~x'bBUj3[z&vu<[~m`BzD)'zl3|8pf _@ ضP:0_vdʞUu.WBER0S uk]~7ъ AJz`2xnǽz[sgcW1mqiVLvuè/a&ҚEVԎ!O] Km`X栆}o%ܙR%}#E(JB7zr!:}ȐԷ#8IJQ]apx(湖i~n Q~F4wi)D^@C/A(ox5\Z$SdyXjq,+=ehA01FPMָuĆaL򝇰"wJEwE:|N keg+<̖_7 IQDM܅I׵ʴ'Ys:Ca;f( }~4S߉V6__Qsfza"?iwZ@!?(1֐Ǖ=@m)= gSh x.U t-_Zm@wJ%j?٪3T|׫uF,KR/=>~Ck*mFUPgT%;'6k);3}KM~p9^A=N}%ζ09G{q i>钱fKhjƢwpscpk@]ŢS|jqriVSWLj&PL?(nÎXM]F%M[CwWiGIZ 0 39>K\=\%ݠϟL;SC~FdAl5[+γ=rQn "mb׵!!z D~4g1ʃE ?4D6FE ~spxd8knF.E.Љx\&|4h8WQuѯMRCK5} :%Z|*p=~ !8)(A,Yj*u8Iv17%1#0JX;Ύ[^KeHlTת"uFW#N04cYհ xrѣ~ZEUl9tOO S_= 2x@|.T>фEj"e$͏Ǫ-OL-jT!I}g3'ܰ'eKZ0[PleLPD%%GdGt0 )_fxϛ|!/|*,\Qc,]mD-Uɜ+&#ˬ2'یyOU6.*Ei-("Jɜ<N#4ÎV٢`GDww g΃S`ue"a̜@%*1tк o]e(OZda?{ rw{:-ZIQEĵ>VKѲWs>f rB{Qn90C)\zWb+ k3 MxWŔ>&-1'>$@gNv|=Sc7F6XN1W+\-2tgC'%Z^$^BXՆS"x`lW,.Sl !Q;,/ޅְ4AkThc&a,;ÞGb ݷV"!5T&Mt~ޛ0L^l& 緺,fA/A[àۅ>%\IXZAN^mTO9/VyTG=ga9}1ckvMY덯CUQ` 7"CqZ{WjqsF$Y+3-OrO ;A??  JT:rUȷ670h~>Z_1uw7 Fbrz?kJ؅Y6yQ=41 $pX%I]nH½8u,0:%6ȼL? B׺ ,Nf͒<͍Jz|ɟ!g["Y ")WZIHZ<ؒ3!xYR_eEBE؄[S Cs6L ȉ= )0x笼\,>v=2XʙoQ/kYK}e<΃wOB&5R:Ěq1Y%B(y.y-*B$_n@3'9J?$˃Ais2BxVh}x  t&MaJK~/2h]ӰJƬxL>MML%g+I5r #O}L`h=~T{L&]Qjy\F7v]Y5$([խdf\B2];&ܢE8gI*?ݫv h4ÔJdΦ k~d%1L(%'VdIDּI=oVb.;jʠAQOC RH?=p(V9ppKb3 躿.krr"$;mQ ӂ#C=C^* Qscuj"v%6۱86߹g"Egq40 0J€n"p?HRK2GTmf merrY68(uy&I, y@6rhܪ~'ܟXSJ3Ϫ~&LqTphzh?g[MҘi3z%}mxņ-nms (*rAJs"Ɔ,c_BsH^ZVkf-$胤"\Ho;qm=s_Za'kV]}x4 0nl9*l8/ @KtfgP梄:M8/CDThJIN7Ε(z=W-f(q⚵M'GCk,M7LMڰyɉKO{6fei IҲ7Ж:ԘIq ^{:6슯/HC[Ư$udgZD~Ԍnt+v0ݞw9k7S8O ̛ǨuD­owd!9NȁcQ-uwq >q(Ո; ʖN<ʨ4BUJdk*CV?пrQXWcfu}^ϻipJoPg+%Dq!Yw;bcM$cIT uy?:åPUx =`qcd=c0Se ?soQ?ۙ!\_p9std6!~1 -aVjk;jQ35LxzGt7}cbzsZ;#]XQJK-C)B+]G_A2ݷ܇dSV6 (ca31ME,^LQv>a&z0_"WPKЍv-G jD]DYy$|'M}Q婉pBBBV:Eqт<1 :d^IO|J3R@E>I=c!G`x\8Q De#R,VŚe-2N%$H<ֶe S,W*gC7lZ4)Rڡ^ A+x<[6Y$jsى vRӡ# X{}]q3 /bv /N]M>,~;sdkGs>K=(˃'j,[A/}㉨r*lRdSoQMz#ߺ`,״8d :+hS$~n%|FX!=ǀNkFV,!_Em0(W\wiTAk/>9RVsy' &dᅗb#_:A:XMKʎVBLpxpRP!5^Нz,w„n(o:rIe#D3ꄝl9:FܬZÜ\@t6`n_Ug55.k!-YYHTj N78JѺ~ycv.> [Nb7@XD!P%$K, !8#v(UN:ONgBm|N C$ ғH'nxF9DRwAo܌=4f_&`04I6_S7a1tВ))&b:kn,m@qqfx?v. \&[7?`|7u_rX{m~0C[;N!4 3!Oj‚Ep/_7u7żp.WAy?lyN?!Y,Jlvpfi⡶buƩ6꫋tFwȱxF4gdjW?~L7uo75Y4-Wj&sЙ:Lz5ev>^>l`jÎ-ɒȀD &hT3hk@u/#pβY`iGۈUC7mUs--_;o>^Xv}Yً'7 >@q$2BaJ2~y! XM91SeS!v<._Muj<$Ոl:QI8|! >{e JNJe)ibˁ7k\;#Y!58(u/cHL:[9!C 'nqH^0U:] -9hP!E"xĜx֦֮q OkohTlOf"=C ԙW!VKF*Y} N@=,wY 5,UCRlU\hk+\3qRQwt @fA ;6ӏ*,m:Jw@J-ՅN`Qt3+jzL72-n'YDōˍM$ÌeZ3#13݁m^TV|=nP汌bj0ոSf=%yoG4qǰԱw>\l1Vv.d]|NDPJ9ehҊɠ"JŐ?o` +z?p׆OC@/~-G9jio޲_-$T0Q;7l mV$n,%¦ePd1XI E[ ^J*9gL9׏2i8Ynn3=dg6 P5<_ܑYR,G+i.y)ɺ 2t*L]$Rx0C'obIwNd*Ɂ?hek4Ml\iTճyzm#Jn(;I;""S E|e7:JfnxƶO|)RsV-׳HTNb]wm ޥnLV@.v@)2N;5ٕX|7OPCЇ,/jU"' [x=Xa!D= (WfԽT9Xn /j &0̝z}(ւLW x4ܿl&_.@"#Ð%Ҥ+x!Abu)EDH%a_ߴ=-h=s0p`=8zEw+EuHj$S>Cȥ_OaFJ;hPߦ,em9g}'zFU m y HH"8Or 9]c^Cђ|4yʄ d9ş!ƻC2eX~@ ׮m=0=Z^ʜFվq<"i5]nc+0%f/nzÖ.g: 69/0 JD5}X\@Co {g?qvcbѰ 򊍿eJJLKUJ@Zjm[-vTEѕ; 氖JFU->Ǧ0X3stCv4K -q*Sn0Kb ⾺Uk$DhWoFDtԀ(-}bo'|Ae];u Mj %REQB1 t RfϽ@3Ɯq^ =`t=:>1ؒl={AerKlK^|& bGף{0kDΦ Nk%( @~5aȃ7QtMyKEf^+:H[*]ΨY;DL=9펦)^``%8Fs j _^»_3J&-Ɩ5[x[AW<^#h}&0Βi)YQ8^ra MBjkzʳL(U%3°Ѵ|OhuR;T2Y}#8Ziȳh=e&nV)Sh7w44ݠ~1'4û^aъXVm[89>{ l@׮akkߤɶ\[;}`cC4AE'ceZw=sqVfaèVotjRUnG)Ndo߽ȋX'QՁ\Nw{4! $D z(#QV9F{"4(/$ 휻%d=e@ZAp1L%d @zNL"PVjrhYX^c5-z,M팢%mʓ36 Rp_(p5t4ġVbh!VR| {Z#͊ds7NZQ-=n\obHodX\oQG10&ZUP%Ov2+ӯDN(vhJ!  49bE7(v+G@$ǬPi[CZbVp@*pyŸ?Rs(WRkۤp-4V튖,lt.jL9sg<>i(K@ 2`HN`櫳~¿,ڼ#iSV[J &k~>PG%s-vܜ߷([shٍ۾ubJ@̇}5|>G4D?`Wh\,)23n?cfXw.G-0}= v |OwCYS|c9ϜLǷ/._d&mAU*0rmKdpz\ Z~_OFgojw6 p*nfJ屴^+$3|q]>P6[IrX;(z=oz pUlm3]@~x?3#8D@E.{a68ù-N, o6*r?AM$2Q}G8ٕX? d#q-}kQYS֔v)͋+fRhv<: sopy1}-q_3<8u> S.[)̟B3#X&6p LdxlĞX,DSĹn`ϕQ^92ruR=8y|Q *i?? BJ?l1.^·3`bt6Dۣ̅֒ Yoq0GnQօ*H=n%C%mEߠ ;Ĺ:,]A| r!"nOr*Yw9#*I}'UZCsh_7eUC 1cci#YJB$g`I4$6}Öxʩ pGWr>7^ihUcmHIa8Fsl iM:#P·bf/ [ª4k6f]Ӟs>]aQt9lyϑ-tTXSiEGp1itTTϚQ^f>ȟM 1P/vYUBI^c9"'49tHzg*~؈`\󴛳DAR\:\.gy2f599rȣL= V#s> ]R^u ,xLFk[[@5_pzHqk\DLџ`X;?8Xvx5.Xȯp@݁ Ҥ؅082( :?5B{Y'Os0+f &Fw.S[䒓$~0X%jrA{-Z{4.zTLʇ~QN2z \X 9?۩:EE(8KH1j8;#HT 9B}/ oȜT"g!O]_1mtR p[23F/qN,ڢI(WARR*9;<o=ھ%3D]ˇ[aƨye߰/8δf|,~v욯3"J@pʣXp.^8;c]#p5o3zTnYKK `qeduyTE)h*ɂVmY+~W#'XUIGn3Jɘn&ۨQ&MwsQHHW;$6M;0$I=/Νfv2MAQ1jܦEZ`ЎU,.|FqA5B0dn$cc>0fvH Rj{bbUMQw25+I@?{[QMH5uWZ~0gA܊sp]jcX"kehd/ChI!QRxgǮy]P)ќD:+UI$dHW8FɎK,Y7tk[+Eܺ u?Boh/vjKV`[ S\ztͧvv$~d7\`a mԎ98B\1\tTɪu8S'FmlkRbwO_busu^H<ѯBq6i<~@Bءd2ס+QM=IAWޔOہ l ;Ƞۉmw č݌/g1./ ɇ\Fj1jn2椢`2*&| A%BG)UTZ9N"QeAh Sjw\$؜alq6~uK!k#y>Pet ?݁44K} G94B^Ԟk^reZ{VQT]s"U٦48zD3^+8Dzw19y|V.gSwu̮FNMę5]D}u]PXo}b@xgV^/P}uIiWd3nf;h)5$LKu޿+T<މ6*+_8_Urʞnc-ouJL=wQ]'>Q%p@OcX#`6bgy@zx!=iA<LODu恡-eaNj1"d pLoDS.jxs=ׄ%e4QyLnoʸAjhfE s=Y ţ?M  Yy6ƻ+Zq κeRWxsPѤbX/-GC~,?BT qw_OjҍsS˱9DXng מTMVj32/zڃl'TeZ7Iei]zbυq'UpnjD\͉BW։~,iufU J(dJЈG 얩l2QUd~d1A(3`(y 51Z!lQMDK-e, `')ΰ,ju2h&x s$ ufځ rɰrl9 ?(ahj&|utʄlsvz}J+tDiK4 oQI=k/y$ssL~|sP>34zEU(+{zA,8Fh,w0ֽSkSh^Wxx>Lot͇@0=bӨ;w|&_+︸ %iljTrTZzs#~(9ā)@tOmCk^ Ѐu]Eiك}\pV=%XqdGMIB;עۅ"G͹^\mm~ӣE΂4+4L?~.mWP4i/j-,u({Ce Kߊ.iV-zOi?6,ے46: ”fH`w޳s8s ql}7WbjVVZwOu"ئe*!MS퉻i+a CI>O +V@\e}9NxǏ"[PPsMّFDTZkI0_Γ>q@O[F[;׎V*ficǨckQAy٣h&RL]_ 1RhzAvGl?(] :lܯtPN3WOrx.H oXIFˮ~ƻxl$w/m_PtqWkYqCU,9rqaǝ^%ňh[=Yu3dFZc8 I`2SlG 4: OR6'^Ӯcf3Iv&Wa׹NtE ӤLU ;Nl:b ̀zwɎV\ο)$c\ PQʂaLrȑDt+h8 @Ű;^+ wZ'9^eoFa\}gɍF l, 2d+ԑ@vwM zέeҍޒn"T%\Ȱް. ) 6Fi`S3*G9]rdeNsu-@1_q8sprr,FoZǬoti:1c>CeSE2_ f~S*67RGTqz#.MM%sL(\fȖ:Ȣ ˳Qت2֝#[ON aY)'~5$,)#3^8@A8ѰSZا޴`H <*oS6qȟsm|\;и6'-ThC@9 *8LD RTb/ӝ( t]',NcL]PvkddsD6wMlB[}@`e-BS$ݷL=h@4YQb!}O`9Z_ף}9$\V4pY.{v%gNWŢ~G`@rרZe̡(]=ZRJwO!E!(`mk'צ9m۩hXmH? 3s6hY}87Aѽ2ySrRoh)Elgl B-켑!҉hCT0S6EsQ'rmf(s{h G(eM2l oyߣ3Nx 㠹ze3Tވg]=JitPpB7F%jb{Pn+#^`ъzy783F.rDD?]'©8f#R<`J rMO㿬7MQB g<ƛ(-'{Nփp*I&4 .oi$og^4ˁ{2N!_ "}Maf*Y]ӵ/w~Ĭ9Nz""g\ CO_1m 甍fx%R]F\$y<3mcbZI<H~wgU7>zJ! Y>xF';fIz]`*:Ɲo- _cj?C躆`[ZW}o;+OްA֮wlMJ|/nk!C4 paBru L?5su:fz*љQLRךynҺ*'7d8,OeGuoI3sr. ab }]n)v-͵4=Ӟ5 ـ9u`ϼ ܰ,LglE [>cKj/6|>HLj Y,v-}%#w;bJޱ|h$jfIlrAYFݝYIN8DͶ_!CO7n ۼ'>6Kf&CTǓJ`ש0npc40/v bnLǺ (gdC8v*nw%+>AW) dE-9Ktg`r|§?$bx!motH x""cGk!ՄuFdصa!<8t)B1.vH<~Vg,]"/Ѳ"vP흦zPgr r FP b^/dc, $yPgmM|y?q"U]ik5pfsg{Uf\:uscAHyr㜕1}7.<*XHFbaIYjF: ]5˜&Wp'Vq,a೏{pm\g/DxC'z)^\67 U0D8:S~3k.!Gvi%34cqwNwk!k8Y?e]*~ 9;خsx>¹Bn`a:C% "P'u5QHރ!tK B8N(%]j b3zA65N[p ^$}+OB k -ܣf>?PQ/#l]2mImN鮦<=y v2J--ꪪ7 emoæv>@#PLVtuW/A 2a?tJI*M,)%xG;NT)M8ю+4Ò}Q"X4ڤ 4o.Hyʺ:d]=:Ltʇهf`cɆ2`/r@mT)XZ'g۞QR7SȌJr K;P-Ji `\PpVP|-#w.=qu7/a4}T$UeA h{c\Z|"f* j2\2rYI"ں粨E_u\mQ:ƴtWrf%ƅ3=Ք0I&-R, [kr"DDDv-fN=wDJ,̤ժpĉ3|͘"NBX净uA9ocf:u;P*m6iI -И JΙq_ic iS> >Çar }n;t%TY%q$g5)(Y?qAլnM%,s^1B"[Fpg'r1|%fΨJA܏>Τ ZN :Ewٚy;.>..)K[ϖ3&?*#*zl_|ޜ@Ɏj" &C|r6Q D P8sDJjzp4Mp&B( cK, }CwO%!E)l|ܜnzVQX3xpSVVo"vP⾴ar ?YEc3ȏ2:$hOI 8tg #bٖCf N–ӌqL?0HR۫F2G>{D ~ؠaEIJo9W;"Wb E18X I=ݸfܸ/|)^6 FODs S^Pg~أ):Sz&&|ZbGBU1!0e90\iXEvC+TkƂw8S!U)%PsYjI.~bN7*to:+>DS1JvC̬T֋O)qPƱ(^纄0o~ uBL1f8ŏ $b?hW,Ef}7Z}f7T֞&)7 \O5e'\\U 2iL ^i/w5V/^<H_ : +>z@צ`wXqqCQ@q RiEa:X فZG /}unpׅnKQf|_~"3FԀ R󕌠 BwDtFl>ri7y)I{}H(xTU j3?!tW,~ ^؆ȷt+u(%g}Z#!Q2`Q)6`۰C!2m; ~fhPe+*% D:=!ѧt^w|z㻇iF@Ḡ ӁE&*N>Q %FY\]=^`M|vvz鸄TYP/Z $n"%:,+QEb{n^n 2Kϝ#)(ie̤<2{I(E";QHh ީ'SvP2-OrY@TQ2 Wq.I]q1Qy|yК&z!Vh3\^[kV}t Yt@v'6~dW}C&򿋿/9AFyyQ[&ˡաvJ2XП6QVK/J7m er8&#>#n7Ft+eV3[<8F2B ӑpV5>DqA̴mJNYLYO8~E< Ó8M g3$nA.}W@QQe=|G|T8yFYF+C4rjcNQkB,Z,㏳B:N+%Ȳê Hڹ'>tֲ]jb Px^fuyݲma{/&9lCv?ebD!?P漤fTcj,fBo԰{R&N¯_ PA(D <"X"A6N/mISjf)Pc8o}rs7ñ]<'Hvln q4|}vוw~ðBb 8U TFNyNwfCo!7mlWDN9WSʒD{pIʼws;r T,Wq^:H?-9,? dȨf_?uIas"I>,rqdF^%M7}VU$,7DѵXYPWݙ-*-QJyW/?IdsE'!е?e_*~)? K ݆N/$ R/ wU x ๦&Jt1KZvGBԛ*/9KyN=XJ^b/ʷ{/aKNJN}>ѩ O)F\ܽ-)||7M!C9;6P!uj\UrxrHzK2'D=ӷKŝRgBoB_2(L%Zyhe ݇ ߊ t,uz_.hо-sQv/D>8;T}"aPbp' TXFb2K&x2ǀ.PAjR #߯3:r3I/1O( 2p-V_IF*iyuK 3_}Qc~ MDib @VN> ys T/4?oKLC "BʬM^UdA{W=ȷm!&ႦmF9(rjFX8|;N. ߜny f)7{"b$2;T&eY<2-:t> 9-(\nᩑ[J.2-{2Znk&rjNLQ}_gKoIC.]LJ=.$ΌaOwŽqD45鬢 |uW|;‡8oT.wC3EՊ|btS9&2M>ebc,u몧GYrYSNVR꧆kvrݴŁpzYj[a!`~^Pol=SgA_ˣiYIzF_X[ .9蓖4cV- 4sRN(,Rm O3 "֜6=?q7xN`L|]K}Hm *sUw{=>M@*Ġ}5R7$H`=7:W0G|L! Q)|CAT(ȍ4-}aQE7NUZYj-kho20Z ;@V0t9jGȷ+4&I|Ls*TTP_N;٘\; ބ@tzx76N a?tc"OZ1xk}CX_(;ǟP3D1PTHW(4Y@ yl g`k1&#\|rIL&tƛP{[>˂ӢN`QKLmqhȸ]` xT )(ՉƿJ#CB_#RbL"Y-JgO,XUP (–u=(!itWE J 9ʬ=~%_K-q:ux yf`SJy/UyOE7Wvj06C}"#=MCOerh<:ZJ^t҃gWDӌxMn %nMSCyD^CqP`T ?IyG ]cL:qlII ӏ8]%w!x9 $,;G7!'KĹb6C"Y?)[f Lƌ8isrJd;CÐFDq\NBN }8u6lHɍ7#U b=oJlq 姝!RPzǖ/8 ǥZn`"Ojmyԥ%~b5roVd_)=id)m2 ~c1zNgHGh@[W}1#^$a%H̅T|⺰,)} u;sNE9:zW%rW= ´6\ٴ1 bv{ Ղc$:qfPg" ;=h@p'J65ut0CSDDƤ#MW)? lKk'ĻQ撤y a˂:Tw)Q#41#v>XE(rz璠 aD"._^G[¹zᬍ{+5 [y3\U@'b4\:B!|BQ\^ y,ӹX̲/d 4΂WM2|?wxFp|uukG9:m}aK7Vs"ȼ<[Ntz1PaNש.B#v IJӘV19u %*7Զ|ك;h8fNwt.s!BZ8c%s퟇?[W-i,=ndnEhD7@LHIŐ@T/d$r]ieoirP<?=%,{}`S(5560b6_R.Eq DSwW"G{,߈BwF(GUu>*ڦf(q/mr^(B Ar)l:*xDͺܧ%JF:xS}EC">dAvBf:9G_Ӷ$(KXTh̴?-I{$=3?Phap-`rհy?6%ɢw.{s[F.j"@~3a"` & pP\fR=4E.Z}i"ч qJ^mp n?~SB]{Eu%اn½('>Myk-)0'7jqN1G<; 2$|9{4Q-"7|2( n3^Ќ my 4.x]-A0;Z Oq❡}Ⱦ.]VNEOC\.[Sj\ԧwl;ѻZNίsꑢ4݅XY U- ϴ^WAaLg3&$u(aR+Ie'ZL^ ,2{R3cMA' 4eZ% ̨tU\91xuԨbߖMU)UӮބ0Wg~zi] H˯ e:Ǯk4iޜ7.V^Ի^eVM+cRCc Fh0 /l:튮PU%QOp!-4:,[h j!T| c  2ro"Z3~m~TFܭ.(vyz )ͯĀc,d?(ߌ :A8{Vx0S`&~"3XP}9:ˎpB$Z袸pV BnZ`)['YvvL{ iuuPsU5sfڗe', rQv^q?()v@'Vqn+u$(~a+h[ϧ)*!h Jf~Fs=Hoa MטQD]c3JTbEU)345k郤Tĕ,@W$pp ݤHFm &z1"/jW/c&F<:J&]rTkʀ#}AI!ΜĜ5&`\͵RI9@7>VPUf,uG5P/5 ̰gyh禝ij@k񻮿[E@D.&yz2be~(!LoU,\3cV?y QƝ`~NAĵ.I/rk ;0pk:'P B V&& 0, iV a5UֱYjV0 o_E7*B=@79ƜNf2(Hћ2;@4=|u_%H,A+” M-t;0-sC=r.gFCnK^.Otز|+ZQtPyՠfF1DEݖE vIe~Qgܜ^-<,D7i% ,{q2%>hHgzoJl*x {-ز)9!:_ՄvPƶZ[9eќRa$#LON%.k9,0K~τ]l>.F*IzM܊ՏfJNfSGqRoMيہ% c/-q,!CΡVHg£EFEG;8YQnT l=Y* {9A|JP` {{ZNq̓Y7!QcyHQGNv }m`uxN$$zr#Yu\&E0xiH r^WS(-Skw$}tɤ)9hl6*whVâ9ÞQ-4c6' 2׻!߂s餘PleZQB-/0"Fg ?./GI7Lnl HƌkA9,g?c#%IxR%zN3PUbIڨ/Vr@!3t9dMԉf5w?Z?PFAT>}l# Uo_ɢ4#%yZ+"!X_PM}fX 5ޑFEI>ĐlO=?7V)y"t> 5;bz.GyxxCCg_纅Q4`|n9*OiHl2q`TK+-{ރ0IwB{/.#47~!F]=GϹH(UI2lhҐ!H$;FR D3 {?%ϙLkG %ѽ>-_zFಆ{t.ek"Ơ<aHMdT}/x #G?ܐb8ޣ@2U?93XOm H޴gTN PwGf2EXΚtM,ًwUU HsQ,5g?f]#[P<(%^P#ɞ HGKb]z/."ή˰k5W_FFRk+GES V{Ycah X_rƪ^r! C-8QLDn,aHlJkՔDsL%Z:ftT{#2w4fFB ȥo)~m^j~}3tfy\[s!4> dyO jv}B9SCV.T6m!'p| :K4_RrB~&_Nhm}U(0J Ca>!boB7lw 2Fߡ&V)CTP f1aryUU\,6c/|)IR(=m:ݐԏzRDizK)~[A%i=iCqw/Ym2łO{myeLNMnnKEenXCG(&7L5ڊ]@xUR}ov̅g5*=Z`m҇R}!  $AAƊXbTm힜͒1jy8Z{-^D0܏Afp> #~v7M3y]{]RMEdžE0ϵm)sAS%y6ѿ|j%*]\qrBɗCKjMmy  IdJқ,,þ?ZR}ϩ9 ,Q8u)йp`7ud3󝲞=9B9s/x7 Ww v'!^ZXe} wXO%pD"lG,# C1uPO{),vI8(XR_b"OIv(@sv{ vRfT.EW_ư9>= p3g]hT&2<&P'$N:(d: (_lLV'nJ;z ]VB|Ƃ]2:XB`zhb݀ѐ~k|+hė4%i#+M\q$&JI5.DR`[[a}~C"ToRUMfR&؃.#AD 5ɠ b(Y맖z|uRp4_n+V:pQEODngPͥR "|7.;Cbo ϳ6p8+:RD 4הx造饛pCI@??4+49ۮ9ԨiӃcf%cSJhX䟡Jʢeik4X~%kg-LZ5<{*R舚 #n;eGbVNcwl 2l!^%B(/s Nj" Lw]3z 7[r,O#ܺ$]e$K 3Ѿ~/.U-PT.j͵ⳛ~PbeUAw-2[ï%"q ŭUݐIN;zjP(Z +ߴ|F~^@s.B#l4mpYs`5 /|M\2o^Y\W@WK΄Ve!hwL:8~?_a}<2T<Ik{m:جGZ"v}>SBdhr9݄Tod#bpOm:K*ms?Qd)Gb-] Oh@b zW?Eh qږՃ.g#K,Uj.MRcV}r6V(3 H4W$nq0ϓ"G;)|,ֻ\MpJ?6F7oQQ$ZFߌ vY* WtQa1H:RVVwPgyh>Vbc_*|f5[iȃSϰB;nhE6:UhDcY=vWT5s(vqoPl;0mӒ8Wo'1b,*Vl~jsOVd Gdi|8}VU|dK Ǚ]"n#~ԴCi'f+E5[} dqRm2^6ћ+O<^pNP:/Q7f<($ A9O׵ż_ĒR\ӿo(R6!em}e?qw)a/Nq'tw&+ʣq#]^)„k)V] hYv;,O=+ں܇OoNpч瑣Wx 9NU]PJovsqk (&=j7UV|"v^_"ZG%<H:W  `9(kŦme}tY@WӃS8#sM7ſ|gםj ‘mix[j!V[5'79#89ÔF nݑɗh}:и).1e64>߸LrqBcL JDyg2Iz[yR8vohgwx<~]IOa !o`_Ah(φ:Ǫݤ.vm>fLTi؂hcl݊81CHmdh&iL:iF͛վoNPhCSnn>Be']j8\n}dv.޹Mҝ{&f' \ Ʀ7MYVY16\W|8o[B@ʗC._,7f=E|yжsvR>bpS|ˤuc'(J gŶt;f5-ذuPPPc 5 s&5$֘jODЎDTyI guC 0kz",Oݞw6}̆'v[ya KXP~Fux5 rdDž;ח? :\"@EI ~ r\\Z 0]RLp֏]@% lظci-=B8 ¥^#Ac1)SЉXaNyK0貄"kmIQ5v/V[c2MӋab,Ьv4vn. lPkh /HyJw;O'a:EƚȁّU ϛQsl{^y!t{ 2eExuŕ&SBkcݗנFi-Sr{*XpdNL#򃬻ӄe9HG LJRrڃIH[*5+q3Y6`f B[a|kK"V;^2I4Ύ:RҾpzTf_.j o=d*g.0/"ZvM``QN'h?.H! `N! *mJol̖6OWSf8Tkzk1r2ƧzCu dT׍ /(zUQKqx~(׹2 )a"lkqttɇ|O8D/D{_KJH2z/8oSBŵ+94j_\7 @>5XƊp] 5*tWC ɼBYɽ!$ #R(7Y n޹UV'ϋg N"I&/r$6Vhޢ 5q :ق^"O4f;&Xke ;m01oX$%M=/ܜTN*:޼N1^e\S![ e=uAQC~Dg8VqbR+ApJjSkn=gjx4KRxCY+~.)tg|$?|?N"َF2=G}Hrjd HgC wІeшf|/]o7]?#\ChNtN=u3\> Tj^G+QŴfwe-ܴ{DAՒ@C 0kˊU?Y4<֡FaXa9ӛ?G^?43OM_v^/f cMl >'hMֵL> @ͳtƹ!s hYJ%m9 K@'BcrUz-Klb~ʡ.8J ػx*UŸ٧05`_ǻh[>! .)a+r W{qֺHTKrKoJ+Ŭ=vl [_M{dGis;PëB=_kܪJ~G&`['߉S B`R'/ ݦǐf% È=rz͜}-`6O,AVU3van^i` dVUr<?)p8'Njc$WS~#u+>A$x~єe _8LNӌٽy^dUcY sWD\NU x%OAgaYXo ϩ3Fav9C!ϡ+n8smXw,C(эFr"wmub둫QIZyGsTDZnO;0!"39a=ޖ=U"ZR$E4ރP^ޝ ا{mc{xu%(m&9F/ LhsZm<J8j286}lcTٷ+(99T 02aRfݷвڑS%v8YSJ~`˳sxU2t?u).v@ve[m`Ȗ$f\U<6δ|xpSԇz~v cWF:ݚj>}"y^-k5H/m[ɦAuWRfI%Ci &쾑T/q@;$>0 YFU=]" svU'۠D!rfnYޤ]m 1&ثwXaS߶ ( a-'3@Tߙ"Ofg֝)*..(ޭB V#w+N_gu^|KS~QrR)#~ pXz()WRI V;`}ޓt?^$t{VQ(0m 4W QDmGn`(ٱw®" XThp'ӧiGG=C|(ҼTmQ 3)5>qރ=@$ߍ@Kl(]W<!#sߥo!GN*dXZqfo/T^)0_wXWA,7ᨂ.qcI\ϖ|e.8nn1 h ލ3LIEfHG(`o80wm~GN,~p4ݏk9/Ę2̙ & yRy,gW-Gr]>fX#)bԐ;6q4)%c|͠br. =56t%{Dk]1'yg%j*\ rm&5|4B7R8y[yĪ 㔐C 0U@dR9s߯>uY iQn f&`$"rLWw PF-a@^݂@gAg '3d=Ǹ)72]|t-+&iNL\@-&à:Jz{L6Ի;_ Y6 XQ\3Q58wf,(=7f3F+!'<$2'jZmP[]08\b=fy]FƋ'##*S܆ Z؄I-[1r;)0ZGͲ<9jڂij. WFRT;HEm(k7cCF˜+;R)J!$:+^6U1zi^ sn_**cC mcw8o ѨUHl2Fut=O]]j:dDa:^"s"d@nSa}zjEx5MxKL$ )gh5p *ȹ6#sϦmGdXlF*3vZk[@l(@T0t9ak/yz*etdC\廧.f|"s/2tc1e.Yx}MC6t!~ C*ϟ9uKa afXߝNyB~{1n.);gЮJٮ&{y)\. @ dumXU| S")mJmo%PtE؞ #6#YpKk*02qI>GJ .qrPܔm W +ӇYH5HUigYkI'&Yƅ/TRB|y5u ;hHl.E#z3A.5o5K Ȅ[zhavSDpe0ŕƴ̰ w蓌6;{opv lPS*y ױw쨋N*7$ E$#N Z I. w{ jX5E:/ݴ4DeåW łL{5ߠ+P bߘa^"wR!gRgb]SW?O~fm ##dCɢ ʙ1bcn bh1n$qz(SpRǟ>BpkHI%`,hGьy%=5DŠy*03t̜˜@#I%Lu (ulFOׂ-GTa[ lp,Ei[i.DΠmXoyuD'jVO_~/OF$Fh9j,9N4?_. 'v܋c"_&tӎ" {$?9IBHԳLl"ŒlI e.g"}YmY\%"w\0a}q%KM r}25^FJP? > Aqۘ JIG[-9dxs߼O^FY RZM1Krr705=%" I8D}ch}>Իs0 LF/q?PXO/=3nQC= /.gʿ oȁ[4>ȟ2¯qI1fhxQq2.9H'X:;BzYP6L}kE~5ycSJH2mn~`9z 2~+k#{ϪH{^D8[H ? _Ski0Dfڪt0 oFٕqyr H;ן]tC7K)^ 8ȁ>c^[Z #U2$7&9/! %m'9H&nWނ|/z\~qS{خ=,çɝ +%d2.DZmNǶ@wn;lUh?>ⷹVZ2`q$t1FyWT#Mp/XrD>y;h"XܞJ'>|(e/0=SZd)EcAjLR^5/H,5CW4]tc>8#3㺙.2w!id-cz%jJ>L$#4IRC_YT"HC"0@Sj`8 ݩˇy *pBaۼLM,,DAPqzZh=f(@ W:a-r"^I,yW(U}WfNdW^@<lj<ƥ}yx|v+kW`A8kbDlfZe4ź(|ߖ&o@]_`iMZʖV8ج- fo9M 64]Ȗ6P<8-/.7^0SsRڲS¹hr)qdfCmkT87D͊EmP5" )b9k2Q{Fq49`d`+h{n.94@׭ JJZ2~o%D%'s Y~v>dɁ6/g_,N^Pov:Ĉ[m{DQLd7Nb^BvN&J\5AoXEVDhI$t49?SCs?y2 ;9ꢊ X%Ur xDu>\ĹS8nN1eMT>-.qt IA~,TBx6QMہ씣B1FTOwsBzqNx:ǷhlՇelq9]ð"/r`]lF8'ЭJi0E`3$;D@(+^H")-`C}^Z<7_3N%a*5ix ϐ~% B-o/yUi?6&Hm=C3KntkyjgGV)3ڜ6@hFl+Vd{riY+}9V?D|=n;qYXϪ @H=ܢeԛׅqiKyyIQG'd5b"w={PQʊ/B !t[?&le;B)$mnΣ211EY}4$*%.\(pQѮ!KLP'Heф_Rwz蚟O!C*7nוCEiiU=+mHR"ˑԪą;a';u9%"W m➱xTkͼ93T5Bߪ|-vȠ8@n٫~8/\1G9$2 H8_Y| E;RF6fo%ղw^XQw?wh!:%qz#N^1ĭg5  r ktq?Ipp|cN1y}kxXehEr (I B=@lb_OV%M'YƁ@X3Gi ODn*CP/\pTiЭ7b4la Q"$\ShF]mNEg1ܶoėĿ@9皇iذ`t:BgW%}]31tkJY~m-xYmtW[;'Fۋ&߂lWgIAS^plm<"K]:֦Jp8 6vqȑ%ǴzP놺5sw Iv3 PlG`HVaQ|VHAde Q1X{gq[!pw#;MF1pX!9( s[>ħ0K3kH'CCEKŒ[2Lt]IL]z.xEM,ÐC:@y.oz3uLmE~gltyeJ jEޤyߍZCP 'e TΤ^ըNӢyq?W 7jMȌ",as|]Iǹ"VZ0p9ݱ6s ݛ7ttIejRϳ;^ S}pA= R:kd~Ԟ3`-Kv+n=n]3d ԩ4mf塤zabvʖ/hL:# @ Y?GD?ñefo^Jw@VݢMr0#yZ@##Yϑؙ zYch T5ty$0k-}" 4E,T6cmqyk#!OYutudk%0k#˷+UJ(ԐBʾckCS{cO-o"LZޛbQMĮtB#&w`$&j _tjp X@v ꂏ65 8SOK<xjʕLF!ۨ'.WNPB);12d1D Z}]L" [`z>`506qmS#=e.OvX=72n0ѼlJk2a,rUYdB_šGnl:~ѤiKEY @@C8TT4JM\ Y,) ?uͻt~NQ_uQi=RW-i6欣~rlglp_-*5TEN9bJ6ra=qVNлL֤m/W1[Q앾7 8i6;y849}2,u=L#GqȧXѥ]_66֦i>{붫| Kɻv|mdVL +LJbdɬqf7 i+r.Yhs78'j=G*:'&TQ(Gw6F2oJƫ3YW@`u1)o#e'fP$1(ŋ<='؜# Z8iqE,,:(b<|#:ef*q $k`ՆMW9qR;tQAq_W BQ0+QokDbHoa(71j.,>t]9#RAQh6rTK H}~5o5LNzOni` /B3iB}+R–ʆAoA;H\2(fGt=)3 \\I ,nTze8 e/}ܙ'ָ(!rl۔fцIos+O2ܺ {< 7nT2G8 bu1|Zv8*fR}]ZV.YW.n@bYwnK=}Sjl?Ih犥j2KuMI{J#w/7BPpץRt^" >-qtW` d= m9rw6-jfpզ"[}t_+PHM*ȡ̼k# )O8r} ݥH#)?Urs-GX dwIoЧzuB#4\"Pk7vs0=eO*w|w-ϗb( _q qW@Wѧcfe?Ρf$? ,jJx&87öIh"M1(հ2l?|r6 =J]֔$Uo\>n >hLWLMMK LJ?TRcwĻkQ]Q' S*~7m^!|9#qp\ Y;x1ؽ<X5FUN.j0K+ꡈ]h,2)iM [y-EĽC|C35odw]}B0%ku绪Dr#Hh?_ Z9":VGt m{j-/1SR |/Q25yI@L57_Vc?לHGݸO/r?d-=#bY؅jE h#(Td? ּQcPok^!ABqݼ6X $V6)¹<.s,U|M6D`ݾͅ=UOSN\p1X1%G}!Um1_F+욂/")[&"q;h3UYI3۠Xf6 Vw WPḀ^7L!6[gM+Oc;Y[߫T)r7aҗ_l3yǤ'8>U^j"UxefTgݱ]XAIo5Y~:=S]nV98 /5"Ni$hxU^T"I+H> piF ]K*(e,Qw}\n5qK[e5h1ME` *F|kGm:,X]]mmYwD'Ȉ8Mr[xvEan3Lzx;Bh:ؠd2f?*= єM/0^<8*P"G1`Gd:*̛U /VLsr1zr#-=$3Pb5z\.Ex՞/{$m9J-J_I)J,̉~]uġD yig"BPVըSҺ>vr2]y4ʕ6Ƽl_9&D"C͑Z7okm6i[tpQE y \yl(9B߸X[ Ork2HLgP;tX4} }%HC uH${z";Ys O>p :ᥴ唱FuWfEӰ"7R4N ͫԾ^#P! ߺ.`dNF)vaas~Q &:7A"n̄8f((klt !^gy jy$L5'!% ;oڢSf`L ֫$8JΤ x +oF`; [y+W?EaM[.-~Vݸ-_n';]ݝ2>%2KjOihߏr AMSئ =@"^)~W|OS$WRqI^"JbhoyL>luOxߋ{ @6T8^uVEJz_iߤ(٘$.sک>`߼kUTi﫺ruPaa(8o~Xp $#B'EQXIOjOXL}*ǟFGţWBQeF9t;ڨjmިe>SW(?WdyupQYI|C0 P`9H)7 P\"jq_(9=J&U*o9wtoF 27^NxXk}d9tdjN!-+vj&+_P7gp?KYo!\QGzU1$Cêct ܳO5ޮ\ UakO ݷ3yJRjq28C؄ Ax Dӹ+tBUoMyí4j+l<(̔A <'5wJoskqB$?BgpyC/PJ*fZ$G8KX 1܊iC͇C<(6/ԥ<ة[Ɔ;/Akq[\tp`*gˡ,B$M4ω"׳$L6S>,=5S߾Ca՘vCx+h2u4N\5g7u sQVRB,yqMk5`le'S+6ujYWVlsYU#zP0fKUY; nB8;0D*pd&"xH)j22o}˶/d1X8'lzߚAFr do rɂi] 痡E&Csw~jO;l`.N71w+N-Ϸ-@SizqQUʣU=xxWh$aTY'cU;Zz]^-ztbڗk4 ٢qJ22/}?%7 2c4|m<-6jfI̘gp:kXҒۉk TRdJQ8dQZ,J G:M946]Yy{>TUlOus'7t=/+)#rQQJCW%"nsebx3Mk[u|x__=-809`+]c,憳W s!5%t^Yuj

j1ŋ4qߥ:+h ro扺GuHpPζ^@\N̽ nԹ}7k&jz{LOK%W3\5K |bs̉f#3#@ވx {>DpX<ӻُ:K: BX6 ۉ>F̦o [֐~v;& fHS\"[T9a|7?Q 14GcN+v>_uu0˧ E!ļ":ƥ)$??eTuxz _ 3ý/GS/X)gS(9eci?D03W<\nkppy$Wd{ٽ(CSl"Mv\Yocv2\r*cI#4twC?ŤOaYX53z%|ДJn;"?'1-eyv HPS˹1h0'+.F#'^&ÇiG좑}VNC24m6H!C Eἡ #z^emьk&FDG1=0ZdCEI$Hr/bZ "wbV)P`\u%-1cg)o,[#f.8rAR9lEcY?(FN)qdl=q<4㕖J=DSf[6qXxkOK{pZ΢"~Y#|Y?._zٙqgyĹ U]|>ѧ Aí-6טHܪc0-CNZƠisC #3K*1߷ԟk<Vx=?>$rLB& gWaLG K 6Ey4鑩ZFճ>/~=#HCSbK|\ܷAõ7OA.8N(2ϊPݹiO_bIQhLjio[mxhCBihĢֶCórVG}5_woGAC`+ %y~EKo@B*&v:01T_kɤfՉ,Կj8_'Lhe/ǐw( rԗ\yv%=IFosM)EA̖e i4ᓎeZB`,i@ؼϠF&Цx7 pͼڱ4 ᗚC^ 7Æsi7dߑ-3hµ ?/ϲڎ}) et[ǁG_FV$1li][H%{"# :+󟽙)D܈"GϴaMd߭Ԑo AĢS03nYZ(/\-75IEGTeν"inkdQg*ncj+_6_Qw` s,%dG]*5oSJge6 L_i"k ^@;P~ ݷ,vĩ}? ja{*=]`j_'uzg>=Tw[]vdupuPÞ ;?`^ b7)2#%C@HՎE iw4cc}e;񆫾.UM }NFə9R^,͔蔗/`X*9 a%saP^/_w Lߟoէ##:Y }ܻW>3{YVlN 1Hc^#(e!ܹDuuSc%7^/ك;t5AqIɧʈq2GփR=Da[gcn-%6 TcIkKꥧ.{ͫp1h6&Z^}ES o.WArm߈5̊1˭:#&9mb!0KÍyT\s^˰r53B=Vںfe6ZPX4/Mp K'(٬SdNUxig#MItU%me6݂[xx-m5䛕iDτCto,dfW){mcuS#%KN0)9SWdQ8ScR!B+9"Ox5$Ldiwh{ߒU"F O);+ {\Bu-OH iV;+5gq| ud% 5Ÿ&Fy"sM|:%^lzhJ_yE=*(Q ['ˤ#Vb8v̥PkqM~s[:ZuF dW#78k י~,o@!Y]Lz'+'Ye=i[GC29_$tک[CSr}i~VRɸ +rLU9O?$~t`ioh%9PijA-hr#|az?Q`Nۀe}T4MGǙ@5zƸrS`G|@d)5hP迿PIw-US; qo$IUceHzOU J6 L#"Q5ņ8vn40_T3E5EaaEh5B LK2σ' i/0A:L !{p )d/-%کP1=γֻνW} t'TePvd`<gBUlý /pF9[ˏ1Oz(m7mbęSU(\eRZt{5|G$AZdpClXGEy\gH8S:Ni[~ GsC8mJ˫*X ?dt3e/!pq'`e-Ý'm"(W ]9R_ ە.oNCSbo"n /r ݥY_z!G} -8'SpR7a+Q=2Tb -mMRjXPdTi]b\x6g mJIk2Qa#$LB{9q?V:ANQͺڥuk hp8zSt(Km2&EE̷ J8=⥤ VhSeE}({;IcC$ $fzNrO_-ye~&'Ǜ5&>i V Ƹ6|:IȤf"AjTG `EjO! ul1KPuEݖZ\|i3dԔԪ?8ǘ*dXX'@RXǐG|]K,s-.Grs/*5Vp4dd݃*5ڮY+Bj 0 iƙ$j5;Z~LHkҭ(wpzA\z,46~92л uP5ZU4ەj<ш(eXx!V<.3=8\]- z2SO;:R:v N[nU5\YTMd\2KNÜ rigMK* -PYm3+ZIHbB;پ̭J}Ǯ zKeAob`9^x2*i/'"i>Z0C6ɬxFoAu TqZ 6CAE췹P"%Ru B #iF9x߅VN5Uݤ 8ׅC4!1N C-NgiȽyT\n$]Wc|ks|b?ln!F?+ט ʐ1W*aGt`ChSR ~iT=3-EHmɌ8U=@ҜN\Ǵr!4-6S)H F-H.A7 709 e 4k kK*#dPIcFR"y|<1䦼hq4[#>yD.0lRjkz=Y@2{hI,("1f⪀BNx|F(`dƯ|ه4`s蘣>6^9Lfr[*/6K"= 3&F]\#;/HQSVu )C99B8/V!} LРy4>ke<71H*ho<*CN}(+TIX^;aHGSkM*>)lʨUt˝; 8;'om.˨.]I^ _s@ .sELL8id"eCeb>ŭI#5Mzo,8e_6{6Km?wmgFiqqbbHiZKO&cUP =Eu@(S{cK ,%)% rYƩ ]fFԬ29+ 2{CzLzQjb5IbC1G %uF [0b)Es |" WL?ю$N&}3,/ªZf*fGEsLip dz;=i`ǃ<.f3CB ULN#Tz`ĤR Otm-s8X Ի HZH2jˮ7յ=+2Nl˘zE^zVDUmKx:K)ϒ*.؄f 9x^etO?=!og1K3u!YEqNB K٤+ĉWUETBԖB|TSRwI|}3m > MG>?XߑZjEIbw]T)#ZˑF!'{*? eƓ3u5|R_krt Ls}bXnΧdRr`0 O, AkAmJmN%.8g6;&Eg}e s Oοǜ:e5>S5_x_=&IQʘ3j@[ttp+ ㄸ!9KbO& ahvAL[V5thJ~{4/- ҺR!Ch1J";b9_j8]GXpS>Gw9_<( QekN8~UD\6uѪ^9b#h v/nM{+$srF쭜3/#Ce=6bAWFUb8(w,Gp$M U5&~)9ϮQ6Eqiղ%w9'_8^klCЊ\M#̤`d%E [ӨYB#&Y~|{tX\Dqj^XX*XKi Q3EJ}y}NCk2 $O^0I"4Y Ӥ4WYB|PER5gBQȫL-阋g)~6%_Q#l.kd iR @2:h*0z{pU,PYcXwW ΅j -0eHm"(o8,9eXIֆTBg|Y4t<tQj\T'/8*&>N54a}s!"dA'H 8.3'%Bɦٻ%R՗ef"w2R'=P0X:='ۢadv8v<{QoLh蟪P0y vsFP5˂~+5׶e]"kx \! UV['()uF+%r07Tx??)iv07{Ǧmqȧ n A*"SK!{b))e䧗n+Cu$^YNi%O&6ݯETNZ]| $/u4\ OIS!f PqKxgŚ6h^~Me!*;p[/ri"hF@w4B^E?S"@r4- Q D$m=eu8o*Os+MuXëD B%F$ 䤟/D %@0uF- Q褜 ÇdEM,hZ+u?P9!+"Z} x4haTcnQҮT:mRW3=t%D\B@ĥ>s*_)Œ 訨{  ,(;Mu5-$łt:L/w\LP}Ȭ1+ii A8[/l?=cts@zXʦ(@KgM<8ۯ z7@^}feTObhBS`lp;R5XgmVcbLgR`9G [0_q^սE]1̴ʊNk;̵_SOhU1׉De7=@ MK PNy( '^L ?+~] \(1Z_5a͋,NpK@{9,ZTJM';^h&!-`{џ eŏ36jMo=ߴs!.i&~@ŃД'{ c !hdFG#zMĜO!UJRm6ˑ8[PUuF 21Ι{x=>(HDF/Dm zưb=o{\@O@42s"G(vMjT+--g5GiFnI]k|ږ:k~(Y^Uٰ*1D;meq>j]/9@X(+\ PBY,|b0nx0 ϳJQ;>,9Xð!95+ڥ"]P&?t3s} ~y (ӖM+Dl[Fw{)ҖbjNAS,Zp#ܦ:=q~t|4@> Gސ pݐJ 䟖'dDPR\UC8/L{c7jf]둅NשXgSI4MYͨt6,\V(u!XYL}=tܠ#0?." q׆GGx] KѾ'5^Ț"7Rv ZsWZ*c1@ aAGAba^ɘҡTGƍe?t|_Pܬ3'd2Sji:?ˢ_Fa\bF*M "ro:ӕu*aH,wBс:O `|b[!pI'8g7rioM'.': C9r=.ȦrJ'맗!Sb#7I 4-[+q[T8n<:Ɉ5N<{5cfPWbJ3/WnH 0T7,Sg 09b.ʕ968m9c'gsG՟uHHQ~鐌1<}u2Rf5KV:wV*FHMod'9B3DF:Q3z޸DTv&:' ~WU"mF?ػomtT|45? .W$صL0,mtتA4Q{mԵPJ,@r[ڀfОH{hdܝla:C3 HŸ8Y| SnQnɖH $Xb݇ t LA-_ywX[r:4"!{̶/GB2Pdqˎ;I6"b12)bYFJen^K9:AhO~5aӐ'mq RrXT+opyNj馬/9xp ꘍k~PS0گ섲EAD _!b:M.1C6;&.Ckё3eFU^զ><|KZ/'K8\0WNN%bHړ$U*@Ӑ'"ALV^#÷z~R| &H ԺE4{-H7ﮬti &C8w>i,:`r3("KFsZQ[|E;rق3?qCN~Jy pkFP^|m!x Qv533ʚWY ɳƣy΃o^PT,wC|Ho;FSWSc:1?}z EjRA}fQH7mB閭@nt ˙bxdmiտ̫TƧ? /I^z9SBs%%*>ݏ_>ew;}ƔqG]_ZGh-Wm~a@-%@~/7ntm.- :w?@9\5KH_17'f1*rjC27;HJWzt9scwE\8nkz<ԽL$@'zՍ9ӝP]$_l X1/.nT}3h{|ؙE˛ yx9`,%~ޟBL扶ּEUќ~fd >?H4D"Y SB=}xCDUC ړCyBCsޞ,9ii&t:$:FpTfqgfB\Lh=5 bbÉ۝ +^wRwfƠ$H8lX:`zBu Ai^8T$gb&!l۹KX3\;9wyÏwXrꂀ#rZCO00EC^rch R-8hDC0tPvc/TՎ5n'4P`z kS'S=M:TqޛX!=>k./p#{.L߲0Zh^~*'EINDKGT4_deT})N~Xt? ſje%m<0@Cv)ɪՖdN0كwWR]?=/ß=J;e:'nQ-U} 2a֥aYkfL"S#l1\T], ]WfTAhӓ B&pM0ps$m2 ;3jKr l KFJ"[M9֭j>8vRI̖}*bt_ 򈦓pr&&۸0xᢦvEPHU^jCcZ(ԗNiQO΅u.{7EH`@mД,C" ) ac]"݃zD#lh~]0X(aXO?YK@h:>[V.'O=n`7n=g妢5gT-SbI|xu+xD ],3jK+y qZ@C5^n6Z2󈂕`}@ v?"=AZe V朏F>rW]FoW j/iݏh|MAlىK٢ր/ZJ@h`k0C?tQk9+5R _;|yČΜRjv;+T >`5;GߣlŁLU[J9D.erCŦ`p> xuB,e%WOjrSe2ȱA#(ިB4K١%8aa1;6p97Zji-ybl25P78htcJJtHg|YZyA$_̌%τpxAE 7{{?]hV j j 6+Gzū>e;ն|91VJ"c?WMYk[kF Qp\Y20l.=45{g왹$X'}# i{YT:@!WemW4~j-m| ~ga/~s{wFu)y-_ǼuSgmgD&q@[ ,FpI`Gro_6a n/%F䳓qhb^ܥt*(ӋmLEоLsWdn BuN(<@ǐ, )+D0(8SvAuސtr1[EfTxm(g[2 +}]S;J;KOAHH9ʝC+Iztme -[rܹ13c3Ұj1 k!0Ku$Yk4dMQ*N?L`fj,o7(;- yyJ5 \:vqz.Oz+'~{N(PT}3p]y;{Iis7R5!OLo~ReX&]#Z+-@B& 3LaR)<wٓtک>g ` 趓zU'~ `g?)L}ds~cJA ,c} ,Q3:B[3'zi-Jy~Irƪ1F>u0h-śS27@+oLZ{j+`4>L|G7aS'qĕOj] > ϖ[9D]BΦ9"[4)t5|cSt\u#4j;:O0Cs}֜_ꃻ3a[yıEVtv‚^% 1WAΎ t]Ԑ(0~B"_37/M S,f*E1#{\:'r9nx- 2> ]6$OF{0ZR_O̥ͩg!86rv݃] #|gw*-RKVhީw  0!d@>WM#!W)+Wp9ʿz.&UD۲rѠN.9hϘ9M8ujf0 ĕR-eد!zB} ӑZ޼J=_.\g0P~\n,%uxf X8* 0آkB~z3#Q@F1Zc_^Aȃ }^$'0Z%F)$rqDMѾLFXy)|U'tH?m[.:;rBϤ]43(p7(!`ͭ( :w>9D`B͖A|m(x x8ܨ1F8)^{WE!V4=LJ( Iv#j]J lfQsI![,K5Yg~ռGn* 96@OBq&z -*eF*^B5.hXz%sm1sHqԝljHyf@ z# h22_Y_`і] ]\Pr ctw(ߧ_Uo'if5 qQk+O`AOM\pȴIU*a^UD:=5л~꽲 ԣ^'bf$Ll",0pK?+{fu. \Y {i~&R3KP<4#V6a8oӇV$}Ltᑯ#Ľ7M=:y̲|w$\[NcEt}N7̏{b>if1Ԡ}f<2=fB ){3.E[wbZ!TFGBc\0:N1ܗ*SiH'.x"MR?x&'wW0Rl'n{L_ dž{TXG]MiG>-3G.aE<\M~DqFlHv\GXA#o8yE%]βC#Tc iP ;RŎqMm3jpi,;#UJM^'n"]>lZNft4iy0,M!u#k<;5+olҹ܍ЮU@ן.u2]?4QҖ^aF<@ _J)t,6"4MϬv>08Mno5HȨ<*5M_PGQ≳BY T{7^iaܒmX6S*U9$:6`~Ȩuf kQM\'j6mfOro:q=RF cB귍 \XPly;|Dxe^o]q{CQy9YKhٔȬYIVw7UE|v/Gԑޤ;h?:`dhEQ7CE-d=)ȏb,;-J#\3=4Ix#6$#R.Feu^-d.~i99ĥ=~~1$= ;,)F4MӁo{0Oة6ou i-a2^]z?딖~(v_!J`~H}Ò_Oe-,vѴrn>ch?+e[a8e)ݾ[^} }CNvL%:`N, r&n%;&7C `-"M;s;+eu[QF^3j07,P|8^C/ccU Gƫ# VyL,bm/B&cИ.,BC"IOJF*.a<1;TR2mp1s+3}|cI=+v=?M5*xYۣ=o؛H."Gߡsx1aXlp _p⧛h͟f> C:Z+vKcowʐfmZn@4$hUǼc >IvU<͈v[3ҾToOkæNlZi[wdymc˦{ɨ+-b;6Ňq~;Zbh^J2HqE ȑz!@1pM{WyTS6ə?0Q<#Xi-!nk`0!<_-~ [7(B|B!-@.UODzN~U?~l+ H(, LL2q06 SYk|0(pa$#jB !bn݉x=8ObHFyƙRp[,&Ga)g΢i)L 9_.-t+2cl)Mˋ!DT:>$H%E%Lm H9?aM%^=طYn\ݺal7飒"`H;> R|ǿ:D) 7 Kjgcov 93cyOyŘԑ8ާZSҊ1?I3 άKƘAXv{dHC=bFk&\m߫<6CI joArZ^o^Vd.2u3Q"+ W0F\uqConZb ,$7kȄC\|bGIkP#oSPWmՍA~쬸ݤ'C8#社x]z{'vE4;Gj3Kl@}+Pul)jSR.}{R9{5wfio|u}vkBx>F8AX'Q /ʖ,Z!J. S x+cw@إѬ_L& HׂJ%00Ba[i\P1b?% O!FGHւ/TMZ~\A~ǫ<Ҭ@+eμ]*>)FSM ¡H<=t4ָ7z*w, Գf(&Edr5[Yf[gH^n@Ak- \9 Y-ނC4q&%noGq:wWOE\kFmcC7>s.N))d} xk}N{. Jk/ZHq6|Xs@16/܂;?Se /b{ ihBHytp)d \PmfRP}N aH A%]@+*0[zwiċQP8E5-6a 5nÒ} ?dT-#@PGI1u23|^;5/ nvXƔRf )6LlGP_;f1kXӅN\"R0-< 8 cވ 2ڍܲlTi߈P,}򿇃J"~*FCNSOiФOAВp!6- 摒x?>3agHޢC*\Yqs; oyIӢM^oMscVw>Ω߆7l=pXg-[U{ @Dk)n)thu`B~9L% Vx7ywyH&hQE8?^8s'],ȏz.Z]O\@S"H 82&/L'F[&p9PcQ`fẳq-bhfw8.錩MF42$"k]:]Ňt& ,'=i  _ P(xtt4wӽc ¿kDITN&V ҈K7% 34ݙwR}Ȩ*edvp5/}&s$βY/ЬHP?l"Ā2!砮~˳i@kO{fLT`@gFUaAsTyULh)ΫHLɥ/ Ezi&(z#:fbՃxyEmq^$ "a l.[qEiI/9ξC71u,m,#\ޫLt0bAWV ;SO?؈a]ݫauO ry{h7MM-M_U6Wm&wR4;lq; ^E".ӬC40R1=V:Ԯ$A*2%u*]'x]ipoTiZ#q:*]U{Н>FT犊xӯ꼳~Ru3Q#yJ<$Ii a^s#_κ@Rs]z%@{:bfѕRǐTE^s'm_M{ڌ#Ov/R<cy@1= "‡>v,0KŒ.|9F\<çUI9U&Yj''jk~XjK[/{4z61ҷb>.;BxdJ1RP/t@"DW9Oդ AͪǺʫ]_. FJ0ͬ4|86yFUȾ:eqۻڠ_Z#Do>?wltaR<;wb[ě|݄ #ӣgMߥ(ޯםP `7|36Ra^)LY?!1-jAxqO~URO :{^>r8]a jb-X5.68VZ V" vƛHìiڬqKpιFlB&'cJBqIgZL$tz8n`Q $d5AINse?}ztrdxL' o[ֆxL咭yV4rdΎaj~r[=/|2"8zeL]tIzу%攬7?'w"@t5k}'m -$25>|y/7ݜZ+Y!.J p7Ӳ*@{gu>N?@ZsZ'lWH^{0aq&/Q8#')eqեxW8bZ@|vF=L4E!?,H\в;eo:/j(|U5FYSuqBrFRP76܅4 C7lo|7_[ri9v)krx0N$<-n!tT(76}χ0#*5w9qk^5_愫Y |A%t7DAzeyu|[fxS8]W||`Ȕ¼khDt"(Nc\}/ah*fXBZ G#?݋3pu5 V( yS-amY]Ʒ_ +Ima??Ya_JqlyCO/3hW$AB$3ʿȨ" ni#3:EOTJ]L<=*n8@j23oEv!, [@?.[#1Dq صPD1J"i;cFYBIeٖFU+Q#.hGT[zXnǶ[ZvƳ8I.ƊAX )E').ZW}ef}QA4r”.(ϥ%P{8Vmx_}Dux02|`CCTV 1 \,pBXO*Fq{g.#tJafn ,+rwɉN+0BX|dj+ K]g948CKG[/KB8jIs4*Y 0ҙXAh?wg|S¬PuIT %a~rXԎn2q{F,֔|a )(bYq6$~EWE{nٻls9\A{5H{5<ĥJ3}ٵYK5BӰ&&䧸f ,53?R*KuE,[w:z4mX?-{Qʹ2+_EsK{}z}Fn\N!6ZNoM6+6fk<E8=5 T<>@@dڢVGοV^>PJt.v1D^;kJ+G#c2rhsTtӅjj #zG]v  F}d5S;R8wQTG?r:^^L>xX RjCFh#$P~rS: h銪Mܲ[n&9݊*KE!tX&F3H9+pl)NZ`ղFaEvL8G}+&ϙɘ'/ da!brNyU}pneެ[qܳƐ꘎YDRs76yLK3ʥ;68M 6' %,ENX&xEfuNν`#4Pʄ`kt章]Lwj"O )d  v֋n/ VU֛x2ĩZ,b41>U"zc'[;QO$] H_c~ޘ }ϑj6\3Ns^J0A Cƛ-r?|0SZ3`X!.?goz"8jq}ul l#鎌)w[[oB {o~7Zљs? &j{I~P^V([v䑃6eZ'Q.ME[¡Z{  2BAE83)c?=c`|EJqw3٦+8M]6S #MrYp3ycFီۥ_^pHpRKRRhVƉfnoI &4Lș] oa 9!2abWH 'M.$;tBV3ҙ rNnX܆EmdqK|u3\F L Guf3&6zZFIkO Z{DjT̸ٸ]kx p]n_M&2$."PA${ 3džL^o^_Ѭ՝nwĽM_v'8R>` mI3?E{tज़.oUM7 xM[l??< ׇ C --*xw_o6Hߖ҅;i7w+wk{ Ňl<)*NETn3B7gTEHߢG}l3cmZojm?Se ֓)YG3vv-1NjFJ(&%K ZVDr ս  ng.^%k"yמ,gqZPm ~fMN3yYMKtN&~dJVm釃 t2tP6:@06@qؕf P(sX}7ŐiÆE]p`]tk -(: jMJ6Ì6}2]lZ JDcj~5 {DHˊ_"ģ褫]pK"Y@rTg>gWiQK {绬鑌O0+iv ^ ʌY&,OlE)L,_j↝6٬pz݀{<\γp)]xYfTI2r߫uo 3NaVf*؊plЃ5!4Ꝯ r[ڧ=O;8`$ärE q(M\7]1BtȤeF?):~Y\MڤL!+.g eo'BvȚJZ9½,k9-ot~SLF $`m@e2Ov|.{JUONɑ)`|0]#z{d#wUEZ-A?%NU /z,6krnc{;+ Zo߂Q(,`U+$һRtTC^z&ͧrb8J#qu3yE{3`)ySBX[H5[#Pu~ s,@^>9>i7"?^ԪQc\_Qqݓ{zϏNNG=B^R<Ϸ^mH*O{hqB86BYU*e {ϵԺPo.j5{z L>reߩ#4ORK@# 8J~Dw9H$1rfuѕbm%M&mKQa=k&$nbX+yDX<{&!yiaSLUNBý>mt>3b4Щd+I%_8"zdSҺ}q>x,6h18`"z{C0Z-]?$t'y@psىBh"kq5gK^'ڧ`L:wL6>zi ͷJN?0cCVnKnvzWwX/s]!\,N~-\I^. 8 kRv/h']f^qCP=c6Z<[lÙv]+\r fBBq}U{A.Ea?#빓L>oMˁ=b:eyhr:C5sTmٖyt>nEh9\8.8%|m|}cVHKۚ}3 ꕍ*}Jb#>@'ѱei^?Xqڔ^(ehEIО­9αE㏺սH)mJA*7~nq?4CK[:N6J[L/* h7zgɏǜSXZޠz\ΐVȑxD|ʃ%MYh'*2IqP`˂>ff&4@?Y#ykYHβGJsMv J`w?]IݳOqx8ܓɿ6vHҩؙD yiM vj|v[3IJ_d4CLp*xV ,&mAps&& Ec#{j1s?6 GZaP >y@En(5:9 J1`a}G6r m"YcAQs|<缕{~wD0|em.菱4\Jú w~r_L&tL mYP,7R1@ky^ .Cp ල簣CN>QTL銡U|KOBz(8yZGHO*1K@g:+%#՞HjJߟAo"'|.dX,Vm墫>6:~O4NjRQY֛Jk;HIytti䞢Z+<q`=r;ssBWT\I!uJlröS@ F'AZ2B>|ᇈ$kbע"fL)hB]EEGɧ-D˂: gMŗ!0_J*pUb+V)%ekaVAey++W%T Q6jޤď~ܶ.l7Խ9sVzۤ!.kxL\;Mrp;%ljsnԤ͊ /$=W W(_, H@}x-cչ+ԭp?+AQ1aO7ш]xbU*`ɦU\oFGb.gXAGFd[E%~4Z,]uIe5R4;͸ыLySW]hz qcuyx]Ezg7%wQ H1)..eࣞy &AG6xq6VcH?^ɬݾ|0鉨#m AF˲eUvyHTberRX &G$^t!K*Ldm& clUX~+4dI/+3t螐I Go}|aamF5n8DS8{73yHaɧa?&JO;.&Tj]%ԲQz6}S/2"*.RdžiQ[nhJ4D$S/ N|)C. p+^iU,7Y<s~ȲQ1<&Dk; jQ1< `ef޷Bꩦ|q')bjV4! .r=cDT ~C#q_~t/=q=sn|bQ z b v\)yvG>8\@F:@UxmUh+~hB!}7Ogi w F!g#0V - nrMb#P13BN!o %`p9EᎫ5ɭᏣ21k/7<1YDGwZ;+vEK*p#{u65qRfƷU4ǗXFl E+=K,?p J o.uzwٌ )=՗ktDy]y+tuGQ^XZb5GaO͆Ю߿B.fS[fTlxB/?_.a}R3R'W:(S$v=2QzmWvj[XÝh;p5Du5pB˿"bժ,ެzS! "H6``C“ EgsFЊ糊]|($κ8#PϑE%͋G§?8 qWA{9p tI66t#qAA$fyTd01 A+K@d^${31wZeyøEģ\,=͏)Ѭ:&(ƖB ^q0OH}~"QO0=H:/oV/eo Mk#Wd9s;,uitq>KZܶR(Բǂ&~tJTOLiF \i;uB=iX'$ikdjeܹkxrȺRŞ)ltQj7"dNBPf_mҺrqw bD^m*0qŶtH=s^Y Re,Y2ls@6,ֆr+q{6e" C}o3yWtgn 4O(1*Apg0ۮz<40z(0Uvzӿ1}@mcgx}SVz/l,dLyl~v da\|)Vƃl]11B?&gFe k@:dZU9%_7<ñ??ZI/oE11@TVE}y*^9O"f MFL(%_5Ufꍅgl!k9ice5<_?7Z).U$.Yy`;O?Z WFgOM̉]؍zVp%i~1 <У)op!I|hөLWkvxPofF8$weֹ`.{X]xJbJ?es,ten A^yya싊LՃ؍FK:cR[ҳ-]-zӯIKm{"ĐPoU iH2/hٲtegB#+\[hTR]ɒ-N]V}6AԳ6b] I@|Lp, Xݴ襍+{ci>VDgq(7C rJrOHg:`!ʺy#6ch\lpM'GqB|_Apr=ߨՀ;*#k9FW5eb[|JX0w]$L֥kzo<-d!GHrc\)ZRSFQtb hAJ > 5Uڿ2 8c%(W }@n-Z ׁk"sBvqǤzHvоgE*h:pđ&k$]H봉 )R ւQ:HHs2("o=h\sT|Ilƒwi=^8Kb+ڒ\>fNo}"yJ@5xo$B0$l>~0mSٟLC  δb!K-cK*0LMI^W$ RɵqJ8 :0L#.$E! /f% u GȝAES'{t ! j څ[7 `<-+Xf)kEu1 Z5N{ _DEbp=nuwe.IFO!'DBe=VbNڍP mQnr@ 5M\<6JL%_At^g|khILyyVB vWEl,??~"y:AvHjo҈W[ԛY&pHa>4P7PXZ1`ku?hT>By0=^TɻkOb|gWyF~xf *jPgʠ+), (|HG|b?LH},<4*CA=j$vx2pf$W!4ipn*ȧ?ixP').Nϣ9{tUtz+d8/ (ZP7T?k=o1ׂ]$̷,NJ t1I_7 oGWCnaN{X[B ^]ܒlv{8e>ΡAΗ&]mFƀБޠ׫1¸7L/{APG\A).bY3K[.kI4k«N]v+{2{5ijn֏Y9ŕߏuP9M_P S:4kt-X>RnUhʫڣKíGn5Gmr܌^ y<*B`,*pC?USʨkfB<!-ٔDF8p"%2Pc4 |y]ieunPr'C}铛Bz\2驰vk Ot.7=Da#iq?5Wmum\b4r"Ӂht}"u1wRI?ɢؕW*U9/$g$naDawdV\a-G;[1)X=珘dBƷ[[wN\_.F4LxӍģT[PTPp0yNj2{»]QB>EڔQEUف\h3Gyߜ9bn,^=xPk*_T 9xC;ú?k$hŖugbJ:%^HqH_c:+-tO Jэ}r:G0gD|9O> !oͷ"E+A?^wF#rq+B OβYn5oHvqBV->:{zfK*tp>g]?(jG(Ʉk-c]Ox46@-F$6. rodhsD;"<`z " !2"%!R#Ù[iS9ϠF\ʲ\M?(A9v1=>="fL5ZΤ s{& 歽1t;ӓwۀ:Z{ hQ.kH0UUڴ⠵N^2?<u?@ӿ983eD{Jd܁f nĕ/&LA؎?nyqlƲ֔Nq56 [J8%eC:%N:|m6^|Je9Y>WGY 섨HhdjYb㋠q_&*a6F÷Fx mؖn>Mr~?n'w0|l:p{E1ae=Z AP~0~CK $Lt%?˞խϔoMAn=y^>,G_ 92ApwX (:bpF,8ɔ' 0.աcB{ݗ{t$PG'V\žӔ_#fdu쐼(I-<$--g_\0>pi~/gQTW0Єˆ܈GY_%j=K| _p8L)1c+v_v{ -tu<Ԋ˾`3<7}i=$9\ە=y(0x/s؍>_M騷Xx ::6$r%e(jS6R$4-IGX >SY]`c/CLۍ.ݵhߥxF # 5יYsCyMH*GЭf0fp`l-c~2j銴m5Wb]tUvw3>k'Afމ.[ ޭ<=bJ`nh}Bh@ 0"PΫ<L| t$ݸZDHgVq=rSE,Dum/laMFXuyU{U>Q>5FY 33,o?}V-"Qy[$9!PoeF~|̳ʉ;%6tgNZT,;zf+w;䝯H.g}UttdS8/4[V㰷1"_7d3pK^LASm:|Lw;7нgtUᦜrGlRG7@f>[$;Nk80hbHwV\ӎӮ$BWYtҽ&BĤC7$]MK }O=3g'm+俞Ik63ilYJ!==f|/.zPg#1Wݸ }/Y q:%z}Onϣs8Vz':|Ng"F`˭XO2YI6)HjY:Dq?Z,,b@RtHͺ9{I HG1Ga ~r֍ʨlF̍1tX5ULR-(+ȋ_H2ӽ1*P!7GH"1;pz!5&R49pjA}=yw>ܻ\W !i3'L{E<S c\GDύ@}@BLiFb̶F&cIjy6D*6:$1.LƦ{!BW:\zFȮm= X&BYc'$#R{3U>EorrPm@~͕zR RX9R[J2K!ihJ#c2veehbߺG4w,ET!1xRXb2筶FYL7_MM^MC856> X=zTٿbS#S'Gv~ٺvwTft9ZWb[A@b;q.>6 d@ tY]㬵:U| %݉6 ^܄-!+ Wm 7'[;>֞[Uy=ڐ8ؓ7QV0|k8BZLYeuMNӥ5xGQOs@ė]D<HIV)R*Zю+XC&/1Ei">R)S-Q`> 3o aLX=[Gf"<L+{O4Щ8NY{S$ rVbPo,5a-`[4b=C{hf$][cRt$,IkAӡCʈxf=93]zx%]ɀgmTiPXI7~p=#Uj[_p#PHo Dso;G{K8"&̈ nt;! `\<@Ʒex$&0T(1;#;/-ODZt3nsj*է3+' ;l-s6;$ )vsbƅٳty\D'dqS\{tas/K ayN Wh4E yp3:a.L_UvW,YsbTpWXE!A1&"}<`8$'$| ){eiG^},~/ #G0KcMwOw0Ph;Ji*; =$S(&tL"C]*y}KDz`{`1xp%n;X-x3YON[MJwou*9!=>]~n[K+>"8G:Yc2毑~ 8Xmmv bH{ξseJP&K[Swv& eL<`il ^/Qjo"Օ =2Vgi8TR O>s7Pl%́Y řg'7K>a\5DPGȿ(Q_ ?wKCUMVjIgLH[;"ȑ ,g{nZCm=50/2wMV#x##`z\CyF]u5͕|2xF$[=(r@.ޱ\g~x(jk3^ cRn1ۛT#)6~Hk= GnNK!!L9Q̝JBM`íMV-f6B*,G Y]" ٟ@s;ߛt|^rDQ؟xr,j5,5cO,Q#`~>7iΝsCy! T`f8Fhİ&H& 2CU j҄ˎ~r{K`1Fmway&u3o_"NX!X`N̡Cm ,q6ң },]yvD,efg&ٲ_ka d7\ZSU(\@`CUl%7V7x܎cPt*@y,H!x-QWqP?RM[1t ْ4a2iԆ @Xc?y;E>4^`\¿+IÐ O:dַ0[LIEH] Oa.xk<G??C ]#<3:Nh,Ao'Êm`/!$}/@v]5_nM|3Pj>A PT)swٸxkv /.8/`Q Qke uaNޞP"7Xrj,m?%?epTS Ql>߳%4S,{iY~*O̊˛3uR4$\K%?Gt~HuLR{px_==Es*!X߾FX THqK|T BXQ#>-3 G-n^Q/SУT**5t4[}8\[ /|0 AZcahyUN̷ક;CT~>F9E"" -7',>'Wo1A f>D:b5] ,.⯯0ևhL>3bWWܭQ ~p#G8|'{(̼yjF;-yo'@7]=,؏/Pڅd,Ren|S /FV&^z,bT6߂=##de1pyKJ9ga:WS ;S1(ҍ ]+[8s8 \NBHp)ߑsa [H˿m>n&*)cK/)6+)"5^P7Q2uKw\2u) :jZ2Hz>\ܟ'd["MFK{uiG~XWw&#ngL${sy8a!fZxm*dnfz[r;NǙ g%dݱZXm9cXc*n&h#Gb1U K*P$T-o+yP*7&un_ѓYb!h+E"}Y>pogdօaKOn螃( >  &XٷoMːH[Q+5@ EDkE27j>uH$x l-wkh$ReOM sSبez5FM}kP2w8:|ȕex{ܗ_v"@<^׵A}ڬY޴Fuy.o.jsR;iAi ,<q md'M#{uظ3׭lO=`' ﯈^.H(9&Oq )p4)+xks\ 25Ti k39GqA2(hQzc 0n|/xre'A!rE<6:V~ hx=وOqH,}8DC<MzY2x_7u Pᗺ1sJYO9&E\oJi{DOpDž;^"姲.t! KY՟ )mX \:B/~4MBLj%:=uU*Jex=u R>)z5U!h Q/o+}$BF&G&IRvtf1'+ҁPKKϦ/f7`"ğ%+h6>[%OBh~`}V:$L8 w~B&g:ݟ="pc(ƀJIEExԃ|ۣ@, g&{b53U}@MhFNwm_śYKd-tr d:=SIhMC-TNaUdyޅ K.cW6&]•;RdHo߮$2!@#`fja(}䢯*Yh?gŒz.¾޻ . 5 G0!ap&_v_~ʣ#@+5E%t}jW el!zqN}[ى?W@A>_?mۮ* sl$4GYW~Hhq˙ǑwXh5Kd+^m3(n`2=N;wKv( d3T1YyVxIy L "l:h:-x2f/GOܪW.?cЊ;,l7 ~:!FHޕ=ᔈ20p+1Xl@]K6yܒU-m4 $4* )H|i—\Ǐ Z2y>0F] W3KT8k}/^m!IM }ܮbH;ygy;2?SغS.D

+^j =AkH{l;&3@5lYJӨ}{$',ͦ sG:߾1ӋX^ w6 .Hh;y8v2y~hIMȹOLƝYl1ώpeJ FV<6K95Ȟhh3k/woC?8P NA,jhjdzM<?+s|0,z5drOVA= "}^ɞ 5VMs\5#G\#7(3JaԾQWzbX$ZjJ4x}f'U`d aM4ȋ"ہQ>H[W+ETo h-S|`GoDJ XbebaRj{WGq,1eJs'2NQ?Ʒ1f0򏛸k@ CagBZ-wLX1Ro2١ږb_R 9iv,U`ZN_iE|Q™A*l .7Jܺ]~slr)>kOSg2/Ǧ=kEbi}:'Ҏ2mF/.^j3SB2byb\ ɴ ~h/ G~F5w M"i*xz ;R>}zc`2@ ^ ,JLl#Ь {MVd5c'+XƏ3jbP Uځg/sSOH޶m& \a8W[ml6]=!Oą':#Zl&|8V?8Q ,d}xE,(v9:u|f g0DmT"3C E'U&Д< Y3ךE8k4|q2i1{ 7Pќ2< 'G#A3ڑ:L p?>K+{Wh},ô\ BwqW*"ϻ lQTȃ5ʄ[l؈ jr2"=_#-}6mI:y47A#>ݠʒHz;)}N#w J|bi9E|n1w*Ю,zMMcֈUic\_6e2C|+((N/ i{@fVj˭yښv2F zcK8@ 89 Gh8R𰚱OdZQN~O;!=I0:z(goTv/<(.ǣgD+3k7&g{ SAT%EiBo /heߎإ7DYvQJyh_LgRfet\4U;$##x[cvbc!Y5x=w31יV~~aa꟤L46u`^k4Buқ}緻w'*35 jǮ >]Y?I|^8nc`xQ午%5YY+ӵJ82ы0LB55_\x))2g.5}2]㭯 qJAf/^&eR- 7U"hDE'KB-}k_ĭLr<%p#AW'PCn`CZըWB"ap 3gF求aԦ z*)cub]02pSz qGt>e[XaOuO42 d<(XRjDkwVj l[Y۫^'^y \. ,@kPT+Ȳ\w=ZSfԨ$-@'5٘QFie[7](B3J83 p[^cBkۖ<>?L/F˳w+ͤ#xKdqLDήry{TJsb ߉vxL$Nvd9|vօk^L_r!N>:,eL׏ӎ ӑ%j9 4FgĈgjԞM9kje*.fw0ruS|y&B,u`װ7YEw`N*4Dw[*Nt[kݫ>[Fl鏚ӨehF.SVyĸA }zn0ޗwq}xFv _Ųa@}ٻgǽ82Wʅi;Qj (DI˻{#*Ӧh $3O6U~ []Dv@TGQ#U ȩjѾ쁦 IzPu3ꧠ> *SH?XNNfk>)ۦQW?Ԕ?L`ۧvmsFtD~#LKWs7i^'Sb3pgF=.Xd&&5bTE\K@;߰ɴVdy I+zPOgS7l]j:m54z=,'GT~<Ĕg!&T_X W; Nfua&26^DiN,?ckӗ e8S]3 Тf\ ',|Įrp.A_gwX6R=Isͨ]ye>_lMF$bа*0lgB:Fۘe#1/GC>Ux橳$kdBܗ>u-t'Gi C~Mhe/lY=Jl$ -M[c Ӝb)D p:A4W%\F; 2tvx?:ifʹk4ϵg7*}U7vh`$vKzCGG/ LVaxY5\'_~F?=ݥv|A` l-N0sq'IvLK.?y1ׂwȷT-$7Ry k pqY!ѽV:SM!$yE\zǽNL Io*k]Xm8X=!6VF_':-2Րp$B6ʓ`Y:~LM.#Ŵ E(%NBD@Ck۠)pCܚbϖ I,Yb 4.=%o7_ A$[R{%BR9}4?FL`Z*Z+:Iޓ$O-15+Px,Nerkw[2 {Qn"Уo{Ѐo []%f%^$|w՜9є  w\sgd+K> K ^YKO+kO{;^f}V|3 }jThmB ڎK(duWa l<#߽מk(B/\$ņ/8< ?5`xn|XԦm}4.d&.Ew~zL*7=Sl(EF :W;[x)or-IHșQƺgmVD+22#ZƐ\i'Bde5B]DDkQNЇa{ r|M3@C} >^}d߂qFEūN-wG_/W$}N뵕"6Y:I6e5CZz6| :kEv0O@4JfI(HF~uVw [G ~?WL&Y<1JnþhMiPO$ ŜM8CLoǁJMX|+p'ܕk% ;XK%|[ acˆa0.L]}.?d9&2Ʈ J=WkdS1tc<ƎpsWᗾ&[vK{hIX%(  <,'jpiN }]8Wn{R)R㱃N5;R`E% 9I[WAXMcƚlH57cEoG 9:1kW3xxKJՊkdKm6*WGbefG6†5 ζmc۠iz˹ٞ,Ǿ-#Y] 2 xmȔ(-^#x)ލ"R.h4pR81"dhH $d8ޙo uBּ7 .2-r Mp}gCWʞ&$UG@:r*%prb0+[RGx~'@V05Դ CKp*h,))0^$'k7² %UhmƝwC'UۧpVetLoR# T!}+ IE8f3W{N>"׉DBZD[;8ۍ$"ታʘvv5t_mrI l-LE(\v/R&nd60~n ?+z-^@Cڙ1NJA:Td$蟽~Lba %~/Y.s™,+-^ Jz%P}RV$xYN&jk1}ag㞡cp,24&1{g|hhU ZUJ0?4~J5SYG6#3WŞ۵׽՚'E>+H:eUx]rlPP Ka$cbHi!Rc;]UusBCgQ Dұ vIJ{fyD=qfNѶ ن^t0I*?"4L?冹y͐9m6Kml=.>| D9/}L!y'-9fڤ1! u|ռN 42C@)yuoI^/|G:+u"it,^N_z>8ʣ3= x 5~+Þuit>v_e8 .TDIv ٗ>=X6N2#-96(3N`5LێWH\A¯6RCU{,ιKNj"# ^p;hp6zic"l^QwD{Van[mz 7QclMW+6MxtG7I|WE޵?+IGL׻Oƶ9{,$pwx|1xŌd:S3+d^$\~UZq^tjツ@_ 3=Ry۪(h}g!TAoS%? e*?r?o?G/zTu* \5OoΙCOX~AQ골4޼ `ZWվ [1Έc>&0@IǾ">ЂnQ^9!OP׃N2Pćn{ZlS$Q{HUEf̦r(V e NsǹF#* tg =nاq>(ȼIƚPĴB~f\CZw_.KB\GgԮ(a;Y"-Y D1‘\! щ3a ލ7+0u؄2WtVMNjr8Q Y&z\־*%.-MNS2kyDDMR"^и5b}В}z?pplaY7/*ߔzS|˲$3r8FOxl E=p1 hq'f>xg+T򣖿DM6|q-0Ӕ=Ϳf3&ƺ>xǔ"/ q jqV k! l N)>OezCv|H5: }b1q$˳Oc:L[M2[2VB" ] }!v\ h9*U9{؆qNpcےnHj4卲3dԙmGf%ئ`~^ڰ Xi_ )CA0ȦI?$,]>"$IfPF=tIW[^XIU'<&}jRݛ<)ex)yt:/귀/vMeLGzXBRHTdMYc@Y`)ZK0 ᗡ|Q i͝.p.(?yLo}NDTBHYe) u^sJ H=Ы-9U3- 1]MÏ֝8XރrcP!EcrvQWhfM43RA~4EE~hݨB:΢p$DpJ;"}D%+EXQ $"=.H`_ ~u";*uEzIFSlTI}9آ6^\b dKs0+;wJIQノQ\DXT]Zr%e, * qYȩ8UnZ&""eM[ I4lsdA"3h< E\TPVg^_~?`2ib_/b[VhuY2 W~r& sӹv`vyrJjps(a[4h=!/|Ȁ"Gvt|!Uk[ : z S Wq29l$c$vbQ $(G5ɢ.h-׫6&P؀*%%1 y!fh_Y[xCUƞ!W5@ v//FfF31C~aC<38ڐne},'y{ ~KW5S^P=ۿ%!c/&`1x,1ںDR/l}f \׷vU*4qg4S^NUN)q{F KwW LәQF`nvGct#(ms#? !-7ԁ%CM֭LVi-lFa{nO xpL18Nc)Z|?AE7">\ȼW~xn%c4C٘auݍF2ZUC:zBb}*Lsox5ms:aEF*1P=o 苀d *`Ͷc*JU<麇T$P&B.V~tDnShuOxDpOHCᵹ] >1S_I1PH5aW/L}\pV.P5d8|ⱑgby](Wy&s39O"sО9Zj MP2^GLZ٢kӜ{egH`*|ic/%~?揎F"@A@M"|}c'1Vjfu|n׀c9FQ'2_^]dDUmw\0˄9ȼTWӤ:u.nU/`BAsU7io45|?ѡ-A;MJ~c*B/zj =v aj<⊃ЈGzwj<b]ȽWɋMPIm(JK7) ` WTlmWQ B;[c aCݝB|W܍yX5wDл5 ] 8N83hnk=Vm!kxLڣ:I.`,iBs=f Y'@j`%dqp[(4LrL1.{YX4wDZ)Р-E{X3gWNMLPȨ9%;ZhPh{= ;š ߮= Ѷ{ )l[Ck/ dxkڅGrcIagqHD&Z5nh^/XbБȯۻ՟2XlkoNA@վ}8-DgW7nцS0 a٪?5S9ָFZS]RCv8Yh+(7DKݑ M7)Drn'@ 5飢ڹxմѲxn9,GIcgbg}=jVO@q:g(KcpG42uc+rȶ@AB:.oKd['`8aqokIpMܳzC7'Vބ9zGEjSl|E.*R\A*mԝ"ɸ\hu*2i!D TJtf뛯 C-JaIbc&K\ (D' s#e_TezmN.eO FB_0 =U1' Nފ` 2<]wGWEkI3ߥy%" djP$MDFdhh}ړ[2" zcc˂z4k;Uuu=N&-1/|}i50XҚS\@k>;j+| zz19?>0/ȏdֹEu( "8(JXd.· ġ2sYٴं/J8qVeojM p?iFi +ʖLfc<{[p]CB&A(~fauh{Nͅ {>59dk#<9>Ewzo]9 zj8 u=J^CE}C)7R=Ȓmol̏ 5v'zmP!t _BFz1PYw]y2@ɼ H{ӿm/O u&)Tdwb=W!?Sy]?El, D ; ;։qmNDHCʼn@ԀX vFY~* y:im NVl_2Q0J6EE ڞ̥u-TcS^I ~y=䱟FNyF,Grq0|qVGș8SNq+)82'D§,2_~s )5\}?6wE`};|; G>^v/Md]ЕcVeAABTj A ]TӠexCΗ1ӫ!'ei؊0F=R-dn"F?w\N f8?g>0i{qНwExoqPՅ['DB2$amj0Dco,L_NhcZ9G2^EnqI~⇕0B ~!?n(̱FMR;Y+s7Tﴹ)8᪭z袟ہ}?sAYs(j”Za0^8 "_KyĴ<;c7Fe2]7 >tPW$Ԥn GxaA b㎗Yw뾿,t+B9,wډ덳RTRm쟟<]w6%a|N,;ƲиP67鱼X=Sqڊ0,ߚDA-qa=iA3tΛ-uGSaU[YpIXu Le5 mP.<i/(;` 葙"?̘;VH{pYc/m96 zڐmJ!D}O49>o|WUn=c)*f`0hŌ3)ceH+IIwcG'wo.(8q*ovBO:QY殻FVb :}G9%~` /w3ՒlH;e)|`٪Kp}ȟ ~EYɘ~wF9 .^T~E H&I hT؏|\RhB\XJi"MmdzTWx H,c-!AZ{aVK4k,Ţ ![u׭!82 ?,8H'V[ⱆ5Ѝ ߡpwwUQ^>}#ԃy|h2v ;VDHnKߑ<͔TAC`L6ʅ)*CM2I~c OOoV@R!u$e~=h#4p=T?R oiɾhH0MSb3|kJ<8L1ML6Dx˾yGD&~ÝeS!sVpRl[cyR5t֪9ͪAsy E+ -Sx"y&DG-Il#C;MU0F _@L6\ ׸lHM*RpnQbj{Ѿ]!O,'ڟNûpػV*PXSc+w Y{!c0gĽ` !sXcD#/Yo`VJEaR&J[K%fTj?+)+3~zme$B@Lr(xvY:Vq gt:l[ԃr>%"v(?-Ŷi%Jr]$XsuFp.J(+ݣzV#rr\_yMFEVd- c` \ڦj# 4WH?$D{F>c;գ:]y0~F0 M c攐z|1Vi[;\T?X}Z>ki<+6~b(khg ;nׂR{ԯ $dY.푟5 -qP<R#(w"˄&2b0k;~Yeu{_]>#Pњ\Md؛A;7}%\$bEzuk3O^+?[Vߺ+ A8tۉ擽U &?qx_bf؟6*yZէ* .Kq8E&P5ɑ},snvE:=-kYW6߳dK'=++-`VѯkW}޳K+bϚB`9Z. h aH<dž@)# _J +1vC ɨ3ͅ!4i.v2H,937 gx}Euҳ\) .DkcAKI2Zl(+T Hlv\HgR>Єh]ˏZjs /F$c)B P^ObYP*LE"â1fV-{)QϱUO:(u"8d(TB-~CsJ+/)ДӠlէ~%@ 1'xj_n.0D\_&Ղk;0ݲTʿ6}1We*#/ 媭tbݛ%:P!5!-y,_WϤB+&9Y] IV]xkP'1u]_E Ps};lJ&m`Q"ҢR֝#TwGb+Ks)6酘u>ܝX S7-Mɻ‰M*` !0v؍myPa\y'=KQp7D_Jh74׆':w$I)5s}IKfZyP4ApKؐ"> `/O~ψ%3@0L X/i-h#-*_"F^FG5ŧ'y# Hi2ZQBIإ^UCj/-z#=.KYijؓfqCYJHX:\X9"A_*{4 L:g\to[gDBp l;)Ek%ЂfNUas^HRtX9V>3MMO8ZQ+<,Tq)It­#1K>6٨ה~\hZDr[G9=1-ӭ6tni?l5iχhgo'Q^6:. [?=Hj!IIzI#ɬӯ&;>ёaut;^wf,хI?98Ur"''0kKǗ`;ߋZvBoeT딩5N Q SKMnO"thBՔ*T$\lAD6q߼||*fw@as;ZBZ^ >i($vtS:鄿2q>+łq\* E45?{a'8]8 Ȣ/]n'5]ݱ9,B;X깮ek䱆5Y1w6ct"GDtJV}Y0H~)56(A@S*>':s&ݹhB.8ʐYX׃=Lb0/MCM?*4{aDR6P[Iw_l񱖸~P\}Q 4LnYf-dRei'2Ù83 &?|:/3fҷYBO44;N#ʮ'XeVo?g:l?A6]#% SqyՓ /h/4 ZUvRG}ȓjFiLN6 u.‘ =c.9peM*4뱒}6 ( zW}¡Wg j[ -UhX{aV JLsm(şHF*ZLH4;.U |$'iz/A/{6E#\WbR?+lIpmNp0Ճ '6P҆D2IW9Q";, :6PC؄ٞs?~hrQtҗdT }rC)7DZTymAyǎe9斦í{.'ݝƭzt6;B`F]٧cswh۳)WW3c5ާ4ZhVhC-/bB 4_Ij:K;8&l'GjaD Z98JB ;B 7,V]RΎ*GX<22(N~إ;漢# ( w mw~GIBZeHzL!? \ v!qz+-BGQIүطd7rTmmXiE ׁSK&a]9W)'GQ#Gޟ ,c!Vʊ;ޗ,^"7Rf"bg TcA2˂đ_Uuuu-?FF$dÑ!jxk)4uiƼmb9,hWSb`YQ! j`N+"dj"hB9f|oM d.Yl'×춺b>&c/_EslQm)+l:kwyV܍pƚ݅y6*e-#o= (EH < ܪ4.~O [:%W6T ӎ~ύG%/'t'tz+RMDg/m#p-v|+p$6ygRhx(͌$8QU$- PX-G]m7NX? IVBm]KѸc)IbRWzŎhXhZ]~QH,9C#a'v[2݂;͡MOWqsڹ?MXO1Ibޛ !(aYƟu'-!T,7c /:K?det"1Bv v#0ZnuH rO`kQliȚxJAE;3 KPF\6%Ƽn }, iB? ?^vG*)%iL$!z#vds\0 Fi_y;]"&ҫP| t;9B9xCZP*2Bj$joa:\<&m'>QA`H!L /dގѿRS ܤ!~ss='hG* j9 ){zK`sqAQ|Gz8+^Ja{OO*ߊVb8juOt"I>ՅðSF-=5'(/- 6|ơAI7 *N5v]ȴ@|^2JR n  /Oɐ;,#Í=o :.&n2KYve!yiIUm>a% "-q ФO>j9OLX##+wȵ-#~tfjnK &@,<^Cjf^,oLwAƠ$^>;CEg^.X0x>D]TKhJt':7O^,ktmUd$r!zNG[er#9/&)\Ɍ}u`S~*ĕ63nƳt!D|ʹSUckXOOSxTATTS3S5B(SH)O]&t"@S2reFDݖP 2C֚)!u M\> |RJZ T{`ꛇ]9S9@U9٨D|9 ykǬ]њҲbQ7^g~/훫oVB] b#>e&7Ol`M) &鲸w'6]OMV0}S}֋,30 H=<)ck EBm;mS Y"WTDC]%m˗>ߓrx&(t1NyB]{<104۟ :YY{%~(2<[KpZyLⓦGnq̵kZ*AJ{xx+e #=O4TC5| e`^w(eګ4vV.[1 2КR\Sw և{_dY??Mvʖsf^UIɼOv[ތ9!T$8Q_fv͒ƤW!q7Q畼}EѢ rU!8 g[&t3^K"4ˁkμb@)'֜4l:}p%;I3DXפISUNznvٛ/?J˓j#;:\(RGדp1@#4j}"ܠT u3&mtjC3kr{]$  [qKM{ ?M寉92=25K|ȉ@̣(Lh2ϟwv@R=lr[rCƧ\yWz}ԍTɐlSf9s%h>-ľF|_rMKq@<^ց>6! |/6&檬} %~f8OD{JVckҫoIİ8o&4=C-V>8;Sy_4 UdKI%+V[/.Q^JNb"i]4n1fa9DahߛA}L]@}ϣ ){+XtFR{h뗗*g5{Q:h\+~Tiމ*H{OÍpʿ7b0n6vz]Xp:&,~_a24T@PK]Ig1z|)5Y,r97UIcvNU}o> r%IJ=!o']!kZ\w,M^^7&6y K!'3A~Dmvj OI4#^dblkOd:g{ܧTS3K|[ QUE*](~R(g|<Nc2w$asJ~v~s:i,EGi'ԉ×dZ='3of7b,cy\o^!AnĻQɂRd~r[Y3[l shO(SH8IBG8dIx-r[.݋cbO&o9ǻl ]n|C+).aA;a~h/'7rY²} yBW bZm U$m"UM'8[kޔf˺P7Cޟ@J+X->T1ew35d{k)DRTb C@@9Bv\ |ݯ΋1  uʮu!J\5_ mKcg`'ȁU-ߝ`%MffH-ȳm䢐)-wT[*|h$XBUl)<㓐4_p:Lxt$SEDSR'P:8ɛ伢ע32]`N:CR] XT^_ Jg:!Bw:c`gboIF눐JQWeQ/Y2H+Hϑ:;[71iN笻!r9$.4ZS&&uf;l>̞= r?t{C A x D 񀃍`[<|pLA !UTSf+|8k>+DNP:N>!B@=q (ˣd1(068 bY R}0|<ͩkYPh2KxhAޱ1)>*\b38P_%_3 mT@+@O!CNbwb|44vY:вR?A'4x ^c"^@g3 p2 r eo+kT:]MMRqqe)ܱxUÁ<)gHE++{W[ŧlfG=xY@?k Y )s 6+Ovܿ#W?~y (4J236)`IOmh@wL==bp| Nbu1`NԚ' }Bj OKj=*щ$IܰTJ 3г .Ue[{&ʼ@]Yc -Զ|ܦN$)ǝ(B;?6{gڄ1B"@6>4k{1|-=~VJ SRSxϞT-Lo {<`d?#X7SG漣ڹR$ACC ;,pB9ViosKK4WQN8GY:`ӡKMԤX̆ ;jxokdf 3.7 kI+àvO{, ϋ0q&.(McvH.I|=/zuLؚq}@vƔF({03[q#k1!d/tuw "ru謹{NeIFuFp'_״`[2ጒ4Pޒ}?FNoR ܒW$UVJ1s9Z9UB'3y F_/J%)hTP# _"g^+TE1EV1@B?d?~W9RADM'I.d|>Fg+e]^/.[N6Xu<^|g⊳*!3݅ʂՙa Q fs+ZN:np5h@B:nlp,d*^0ARc*4rwQ|s=p# B!Cӻ+ihd2|R`:gZv_lH𒚡N,D0{}a=1>~Oj=&[>eBΗUnp4ԽST_@y}ز%p_b)E'zɁh+|!7!^Q78FZDWvr:s4HyK AaY$M0/Rvw[, ~eڿY)@Qb:Un$W?S=w(1æ/`.)^Z:0; Ml?Ч80¬<]`v)Fq"q ^ ;1F3>W \ȹ({w?Qf]^qB īX =̣8OU(_fX'횀[X.j@RGd&&_Gx2EK)Z&PMim$kĂ*s.` pm}l2OZ/y::[a CMlW99S14WkKÞKi'gcO,JGH,?G'dՋ~(U"PhݷF1 DɧT)'iZA<)i"^n 6Pxg^;_Ϡv:Վ׷aO?8Ĉ^] NKfu|Ndl?jĿ,;L̛}zAxw.QǠ}0ɥ.u8auFqı[WFDoTp['6"bTkzT_{`!aQ>X{x0"gq@ϙLQK` %{|E=>'fDHcXlXX ,Pvˍv-$7}ۀչ06.?AGmڂ wW55p!k\6txBZQ#Ep97sYj1 Y-؋a!,`G_D2_^\. ޢ.gOh wšvH4sKʶ8/۷kn5^#ok~Tne:t7shu-5ttV#ou!]`9jDEO>6>W+sCɉ+u;S7UVU۶?O}\"p,j-}I$D DE}qn,nf@K:H9ڝٖn+e-"F,wbڶ*}mZmEh4}HW5 ؊W,pb,ʐT^''(}!5bS׍  :GL*ct68+Zb˺lhGx3ϳBˏ_2d~M\WXv{hcI:T>'`0|k`C7 GiEMV!Y km >hRQ~!gtݥ4JPk G8[U>_7+{B)+\܄‹Ksj@mϠ|R Hl^M<Lx`W>g/hJG6A謂SD`Tj2abiɉ@gg$oxB/5Ji(`q˾:K;5Z)O!T!~ ; \v$Bę{*i U KjE8LH&: ŊD-jJHxѦ_=qt'7n!)ILЃ&aϳbiXFsZ(U_  b=;ݖ a{mt)9kG}Fq#1Qʸe U4[<hGD te)&]$ Rl;T=g;h W$;,μ`` L[{pȒ%>_Úڶj ر$P=Se/wBcQFH>*eib2@c%am Aݺ6~4r&hq0+>dcQwf(Me*Ch&$*|[Y7 nX?¥I3d (mw/Q! XqÑ[}F svd:݇0k h/GԏeNU%f})8(.6zv#7wO1)J^g@q73_9ؐeZAf{W pu"[19Wouʋj"S RTIHL)]v,KO6u'4Q蝦 dp^ 5'ʰCKLȺ%G#dV~j"'ns 99CK1shk.>QTwK2R wc)rܮ0><| in{ $?܂Ű1oCl_xV1' $ȡUeYd 3*!\Dq>Jbଢ଼izt'Buxg576#VRYŷ_v|7:NqcFdrK\ 6w^~̮mvC= mU`o·q)ZuK/ˍ^"(=MOF;#/maMbۆ;ۀ`4HzYҿuWOO&'ep*/ S]7dvYOvLiPa"s)ܵg @ 4_Ոf1/vQ_ lEnIZ7Liw:]񴎽Wq9, j$cR,T.Ɗ vӀ~߹FXZWܥ&&7(V3,!&UE="}3[@OXm&J[[4@4y{ _ skaՄaӹYM[m=e@-/׭ZC_&7 zϬ4Wbwj-S: 0HPմ\b~ L{դo K-(J-6 bT[Yl4{C\W .z(*9&!0<4.Zp cLLUD& e`>zD÷X'2 r.l8w$SADo.ӗfmL}#:scv25&)tmݢ^tU y69GFBWx5R1*)Dӡk/&mW*+{}$y twW>[nPU|yVsR4j3h;%!O @ˇsq갲>J|CMƬECt.#OI&D~*zwuHqz^`e^C{ 'GҔβ$s7==loЧ*z4ߩ Ĺڢp ޻)ӕ:DyX;7MoHTS!'`#)Lw…RՀtۻz&Wm10%z!/@lo联>`iϤՉ ̜ 2FO'{g)s Y)b Q\# F'4s@;Rlx'~ar}e7hAt՘d|y BZfֻl4ܧ3c* b3IS!)$нX2@7ơA2@^h;&lnZA)&5 z8<a57kiV+j|`jD H9?Wva)+C#wU255q@#V<ҩr"f)':vG(DOg2"CJ5!BV2-ڎFBC<~`-My'׫ EHڈZM ]R^`1 *%D "m0.0?p͈I}-k0<~Jm4jPFɿ4toZYC.AJ15P4R"\Bj` nycaޭ)!,?y[o7i9E֭Q 0}K8Cф8M?9p8gs~N)UTAoF)g<|˙s N1 *82]/B$^+bتeGe\W؞_["Ӧf}u sccUG2e,ĹCO :zDb-@OӝQn֎|\jOf˧ú.yQi4^`3$ IfBĥY τ7P洑mgu\>{]))׀8NG&GeH#ħs?oA dkMD {V ,]?^ ܩ# &DJ >}VfPE0m !=$`LJÚ9IpQyRҒEj:±ߒD9j",8-lSWr:ִkZ Fݎ5C!%e4VDtJ鬄f4dV.VV7Mj'I\'B,ap 24({I WfS4K1teTF%N;c5`gzGˋ8orүɉŝJh)ϑ A'@{ns#nQ]j%dx|vg^f,ե@q]L'\TT$F]lv"'wYfv.X=)&8GFyΚ<]?i9%!$祁r z;pJ"M#SeY=$ꪛ5]`/y푷/)%B*jO~2Ubd5"uݎ"*G5cWܺ] 8[vhU)yMU ҆&sٍl1x#Gl|#'`$jʯ6x YWNƆ=i4q!ԻjڇS6H4&=!.EaYNB{-Bm#<ݍ< FEp"r,( zC1N4Qđe`;v#kaB׏2a(zH+7;6ٖF*Scq322KĔ nZ*` CM Wt5(Kú|&'6N5=z]|z..WI-]5ooWijx GA )=zCAƠG`iJ#`xREۘ;q($”'&f Ք輅d 0"J`~EψwV4%bl!*dk{Cd{Zm9K*۪73o;gk+pNdG'TU\]o2XKQ(̷B)/#(Co@e ;dy)<n2=Yn^ Si`6a!2&3|U){1Sڡ줱w6y{nnj ϴ;Mnh 5Mx{.ꭕg/WH%_AoN|8w SrJxt\؉nm q]AyhyvzcR BWǮi|S&k$__edЪ WmS:⽍CI?ADweMy4Maj#"3fMT؃H`yܹD3 ~x#mdp;ޒ\SVnUu> 5:֐xK|8`9[v~>Щ9V`;vh{&>I.":!?wcjx>Lips4 Bh _/"8zOϊۼ =6d_@-5IxyTeɾ BVp,,&l+(6N3?bFuINKY!(xfn)UM%}C1#KVslk:>Iͤ֟eǕ͓H*;/fU1*YЬAT%f; yᎸf𜏭Owr\ I'V|n6 iVd6"ЅA+ , @r,;6'\d +tO2l+3 9P{tS!wQ'{A֠4h-NrA Zz|"/(wVaRehH/C!Yr$_`ԜJCh訯半57| jrfM0e宮M&^jA:.R܏P$R68#©eSH*`?3l|fR)'M4+BQh+2#ZWaZ|ٿTVE^OlV[$e}xz6oĶhJ4l*/BhVbzRplgE+N3V7:<<_)P|qtFR}@4iH^TF tC uѾ1İfsJ洐ARd{y.pُ̗$4/3 xS4 x) lvtR'eT'H-xOI7|trzd f^V7gްn*`b#T3)4 5}[IkַZqW6/5`uFVR˫*0!rs;!GF-h%TFqy Wc)EpIF (J&^f[UEǻ1|z7s>UQZ7cbǙ[ey.;:dY  v`\\+ᠷ]̉qTt)_.VԐ󪃯tÌ1>JZ[Ab*W;ϚBHmsFFIUUZv"J=l!1*Zl@go\.1]z~ZU4x$J$?~ ' N#t[KphVPr_"rCnJy >&lؔTPZCN&PlS;/wh'"#t~vbHͽ=xLgP"x t:qi3fi; *藺Xc|a r~ܻAKM!qOs:5q>h-\ O9)E^:y}UEL _+^Ey|k XU|T?kذtVq&d8\:2K 7ؿ`doj[u PXKR}4ts$Cޙ8r srwuw߻q,4 *quf#m j/ݴ!rbP)&AlS+#[ uHC08˜RTHut,_BςXmch-k[ۤ*o}?4b#{ ˜ݔO+e={[B~vXC7@UUEzǁ O"USaA~V ?jk\i`^2_ JsrPbZr0 .:Ъ80)I}rO ^]'(+DĂw@]jC:ĥ i+)NZ#$ f]KbUDo1R߳zcZOW/cO9Y`$0%ϡlgO;`sY^㨃Ѓ/n*\OPWk>Z UV-Jzv B7a-+_%{IX]HG. )/d&f!pGH t12*)[u,G`je2tX%a?~UGcRdg܋ *G=^ fBTM{%lVaB;ռ焭Cտ*W6˸_˷Ў2R-)mb%؛5ɲʃmCἙD=ؑ`!C7Y`9kP}׾[uvwJFJs;S}m1;-xfAR.eq!ordgk'cOժP:K*@ HDF&u 3=7,HkaFkGh돣ᮎc@^s)@/Fm+JFYck@tԺ$An|'#T1J 8Й(O8k 9/6>gêN X5(ZV74kڲY|sSipE/P Dt"ȂuL"t, i9'rhW % 8QI6$k_{nylbd2sc{LP6 `yE,ʕafB OD _V"7|cD̼%pib'"=9DG"ʿkW'ѵj@U\Faw:( gc7imݢ=dV/jiV_Su qqۗGUSN,ಞᓬ>yE]jURٟ@fNҧSGo+ Bov%s!Aڍ HD5NT?E5ظbA2JqYT5(ǏX&iH]z u~ ],+DۭZdP(̴"3QyGyBLfq<җlp+j﬐tjy5 %涭xş p -ƿE'.lFQ>>JVP.z+e2U>@,H 8؉@_ 8gv!?>e5iIۍ~y(cD_u\:Ѣ@aPMʮܜވ˯'?mH7Z ;Xs( oլJp|(P^y![-|Xi,*u49) R}㑇<]ikPG2|(-p(RYY;ş":'1ziw fk:ZĻS.Pȕe㤦F.IΈ{kGZ=ѐ=Q9x&uKz%άBM+ ӿ:o# wبlzQ5A_PX϶r| D4Y66uz9tFܩ"뛳@Y Sz[6Yn D8&W:}p э 79џ= Ǩ;s2]-$Q#Uf>ܼ{ vsm^hÚ ?Gvyn*ɈB/'j)T)oxgR5%-`YG@(4-UAPk+/na6̢e9`äZ;Ft9NAgS(C ݿBl[l-,<|Dp nUr};CItѢp<keF(fwҽ`FE/y?W=&@]I[,Fqd5txZ¸, 3'."[6.G|< f;ܵ?ΗO{,vW(2$$!Ys5Ov }KcD|GRb-d"JT##ocG"-e~ `!ǁQ&W!>Ni[=4 ݞbvwkݸ0Z8*7l }i~? ɦ$I&b M9W􏠰';e0{Y2zpULc?W} ) eh˃ <&3D^?|Ώ3 hXkɇw JtRץx&>:m'VXkjRJ KSaP zѧJQl_-2 \>ibo%MP+8-&y9vb١偋5`ʫHCug:$^'/A#h[)}Ĭ&W[/3刉-v6΁N 2#9 M_3i(iTôLUA?]%F"T]IMgT'2LSeQY?-2JEo^Kįăyp1G&Ҝ(Da{ ӌY#pEv8I}.ĭF φw(&2CYʎ2AȼNf7G+F~n͑ fvFk0i8~7PF1I/qkۊRLθQhZŰ"f]0L^sua=қ>χR%:'Hz\?Hu9 05Ti}h-w<*֓Ezw݁;J*:F -\Ѣ`:yB6igy|#㙥b3ɪ8#&\4|eeQLt_Sm7 ޟ5T-,ݳ[%BEt땳=oSm0x2ܔ nWb&*tZ3&2CkʋО}E"VrfC5-@ǜ&*?׍6!+./ '3}t¸ǦV #ɴ{&$bOk4/+X˭,b o 4~&GpMo;:\Ӹ .ףnhUAR=wG@QGaVU2 ,a>,' [ZftB!"5ZgPavT'a\`:bqML-"N$F O*!jTg{3x)pc,~|[pBq̌ڑAx:<©cpK5{}pcaR.AR]AhʩO@sػ֐ush4謞%OpB|& lDxd+58uRj<}*uz7Mݯ.^T1ʘ(6BމDMGgMA E(}5VBkbp\XxX4Յnao2&n2w, $c8gN"3@ߋmEE[@ǟL獁}  Tp쇉/UZEÐ7bC^ i;-a`տ<D}[Z2n7e' ůsºi^7A9~'xA avwtu dRuNtݝ֓ 8RYtb2+&h6 " H=,x,mNW7Sr\Jwޢcp"rT&1?1^FujLR<}1 _k͊8!K%h%k+wi;э(dzO>\_YyYNҴv䵪*lFGwc2G@]Àzk5Ū|AJhRa4 8 ?2ч8(6L8i7!VH `!>VLCICrӰ/O| `RsHv?Ael839Ɗ2$`Gn5f}& BJS<[PWTl~&hWqds w^;RYNG{I.9irȷ=<`ൾt勼-ߣ,@!BSY:j lb0ړG:4Xt+5#J{pٔeT"up?n-bE0t/*EA"^&H\ONF\YF<<:d}8Fh gMVKU8wQ M yTS(1M7'I+/ x%Yڠ^2ec/2CEoy |yV8-6 {V>sĝUµ?Jc6z+lz5" iAm+{`=dtgDA+ o|X%Pk܈' }b+A*ûSfKU%m867\ e^8Vp,ʸ1ē `e!ۉh~s)Qwb 7t隰Ken Ӌ@+%s=p7ɛU\VDФLޠ]1$J fjKǾQc |],sI;"x꬛|YnܸQ/u|zHoыJh@@2a'pM~Unx[~Ϝ)hͷ^}zEt4/Cs iܶ#+>VyY2R!+vJsc-XX9WT]8lLNyǗyP4 u9]z=@C>хTx\*t% ĥ6&1d'Jk}g:.Kt a}}Ɔdžhx 5}i?^`a'Bԯk}x&dF7Oʹ3v\^U1 g'X4dJl 38ـ,fsia݁F/+ksct,xFM-ZKjy+ :cv$ ;F݊h70J @kZ1-aքFJ@E@gf%̅Lȃ)YnG6G9% dJ.侯HۈDDSFߐT (FB> _]m79ꥐ ],  +uyǩgrG;2y-UV07®#|5exJH Dt-Ȑ_z󢕔b#0iķSګzxBQ&fK%tBDC:{?Ģs(HjέU bXSEUJLTH}Zt*lsG/mMg(Tu7TjĺpfpY/}i7V:bNWi7Y`8Sp* [{,: U ׼&jJUߍH*%xlo&,wSSW z_ՑQ\MiD t9@LT1<HH%l<.Tog<iQnn\0Kc&KJ5?C&")˦'#W[,,y&N-V5ڋ5@!u=yݕI1SHVbSzEl}\gpT`qɶf=4vC274>)!;X Yd_wgc~]Q:8߮^\@9r3}Yg:fU_+!Uƪ{B%Svb\id3/*d`:Sc j<ִhgez~rvK'r IyY Me$20DeRZ"0,kL,!"X< ;Aۑ8aَu*2n~CF~+Z67's}֐9. &vI~"1J3-ޞSY,VRVM?i5q32$]~lj.ywRM @or*(!Gtbr%{! IO-y6?>5J@C: bÍB&UH`l eTuub:w(+KK<Byk P3*XP`BS[is)9h l2\?;JwWygY_i[L+N/cSbxϵKì9E}:DlV0 =hWW.=ՌPISBWƪNƳMYд/k8C<|;Ų;絍VZO%F,e+!!S4Y *7)[&CUF Aö=Uy:-/"6WsD }8 E' [{8w~(fCH wwgswsc=#iWnpbʑΈF yEof|E%YeQ9$Ҽ&GCaCraJ2FuCluJ9P`+8!B00wEН WqTL+e@tKl^-7xm5/`S{ 0kdT{T7sMH |\}elW%¶QnU1}LT{ّh0kHI^x̢V}ҀF"!8&&$2T, \&֨ƓCU_*,H]s[̦Wg)!?jgh Gܐѹ{p[ӵ$HYzogA?FRނV٬.P   :]:o#.SD2FQDׇ,8޸qkJalGg\c#_"z@K FcWEF` ޘ[F(l$>cLSAdwS9Im)l*c]. /~OM6JZ`VN)@"@#3iz[rmGS )n@1J]}%bAhm>uegD:+O܊00(9YwxWK-B_BouVGhMtI&k#Cٛ : N d"KydN뙣?%ŗBL`Y&=/OmidcjB@㏈dN>[pD 6%z-6A rB:f,-hs'U*ՓBl}`jmb~M6 Z6U(c]b*8G"Hi6wS"}t6#4TVER:1G:n2F]h`+㠪֍Xyi O>7N,A^cw?7׺|2~zHY*wP7KE.$ 6_\CM24 vh24U`=*H$Æ e&aPx`L:EpFzZ{8EHAV`V ;qU=W}w%Kj) ҭJO&$*M yL Ut8¯"%K{z8ה8iSacj"/lRG\* ບMQ;ͫAJhWG"I\Stn`tsIkJ;.gS90sܪ8*J JG)a= ) ԯBo9~Pg^S{ح"sL 1imjX,jb`xJnBX7:Q:0jh(\ev]!JkQ2~ӷ<`T跔A#LTc)b9j-rbe%Pioae"IG]Z0rT3[<;gx lv;#S׎0#FL&i A Pp`̷Be43uxtޔE4Ȅ&h0u1˟]LFcT͐UR^`S'@&X"#k1[Z٣^SPn̨(ӊfo:l#SDSk|zKↂ^덗K҈D1E.k}ʴqp5D̺vSK[: 7aIYНiYɸfG87goq7)"bTk]+ة6E#c?q$32KueIr[@BGx1$ `Ac٦\DCd {lFY)j.8yZVS3CtQBO7 sL9Vuu&HľeΏJ= )'ݓ? f-)Хf߼F_|&>("p2xG 81`8) ʒ?`僆Xu溯,M )Ĵa 85]LN)w̓UqTN qd'(㱗j>7C $b*6ܟ.rzQshڧ6F,`ZB^̍KFקHHb>0327Q7(io-f \/wx  U~BQ,+3(`h /V_a=+24 8f Vy Q?GMMT$pu6bIԃ;.m̪V$I07w7)de)^DH ȭ(LgLqK싧Oe$D #:2ڴpNWHꐖ~Yܰr D;Ma<2F\n|G''TBk zOLj>mox-*gq -."'yd~/:@(8-ĖZ Y2;z54-W+|f$3Yd4,GQ[k0fj-m(?2Īr=+B@9`•9| :AxNqX9(Tx)$ CLE^і.m> U/e/Y}!A_=>E& }”p܆qB$>B.L3Zf?\ѱ VfЀH 0Qo:E_'P-Sc49n|/~F^JX 0*bY1ZC;/jdB#.KPwɯLP+A'u$)>\f"-խ'H.Q;{B?>0"ϦqyкdIL|0=nR6\O{ngV /isqw^Bwv`"pqk$`u.O:ǃYN<`z1Ix"y T7\2׫|@H~>&=m7+y0[Wpj`hZI'QS#T /~!mk}0:ړep`n"_bd]$t_ոpXt4FB ~7 va$U2p6Ĥ+# PŵZɘc{J:]e.(z!>3lsF Ҙ(Htќ.MB~T薽5lIūP[ee(}9p|?Mm#Ŕ@YrN#9({G-+7C2+/oڶ62vqpk[%IuwTߖ,S1U?:yE:&]|B1, X+*ZGBF!!Z2W&HtiH1s7w[o;j:jX<+yaM`y4V }B) ȦkL U fh!o UrkPMμ7065T!҈Յ둾afA3D7`0x pKfZnc[yUlVW;]Gy666dGӵTZu9t;x^slsmԅ+[P^Ҳ'5V5tj8ꠦOAqw;|dl%:`xb$H~Ҡ%]|E^ 4{݇]RN]SOj/=Cұ˩ì_?tP4YomW꼋%Ta<0 K*#=Nj8NW_wBخkF W`pG/-V`wX&U+ǛsC!k$LQy2 yzIm i3-Wsfo~# |zpyA:땏Ei0eܚ+:$wЈ7]{Mk"{AqT|)ۊA*IM%)n⌍X|Òjk(x>U1**!>qў|XpaşZ5\'"ǎKPb]ySaN6BvثJ|Mx*$t0[ )&_X7܂c gD42IN!/q[WdEp$_ǻf֎ Y%|2Hm16+_zR:Qq>@gLEOCъ HrAVɷ( 5pQ!^p~%+G f\ (jXL~w F:;2p%#gwCp"Ix"t:fW iﱑk~F@i9JT-&|{j o>C%ALf@M롿EZ6٢06٫mW|EKҖ,ke,lyjqZ^-{ul\7)O]})\1]I,izʹb"yTF$HquR]Ȍ7J7hzV;]^^NrJD^XȘm,]rB暑 &fU;TO3;ҝ ?2C]4#Uʢ豀YPg8uN0吜{hZ׏<f()E3!wfi!FZA1:J7ثRLz0zƕ0l`8(:f%4qY]ʇ|z9vxg6> vQ]Xe#aI?xw 13i0+@Jjod9DXu˥-tk*PTbrcLHAd7i>l`m",f R^Riz G,){u5:jY\=޶7?uk퓳%ի2-s8K;:XqKhϯi= U6$'l O5M qe${dc IlR%U5HmW\ l9r) }ٴ= $*iՃH^']b(HZ]=:=vHr_噈s^"SM7EJf` /Qgr }?̃!%[7h?:+ ~o痘GRJ= T\~Puk3,JfK%!"L#=S{3& v+.tLT#p6H2b$JeaK UӯGkeA\|i[|F:fV'(cc62Rnb4K`rOӠ'cːWZ 6%@8v#]$jsbc,Uy`6r~bE7#cYC n@ ; ًEr6+ >Xz-]9$tď$W!`ˑx@"Hŵ),d~kD}T 9f;rϪWee2fk&q 蔭8B7"t%nj W]@u[Kܙf@|( >U.+ R'ڔ*8S6YםSt>B&,q QK$K5sFlTs7!ARdl{e]yPnաhyC!;VJS=:BU0Pa)eN2r-¬ ^wVtho_q캪$IwW֝2,S6'6Tל XCnUJhj25˜M $nKz13[ g,ڸ./mE&ļOY4| `_gsJX빻wT=j*5[&0Κ=}3;kzE^L3{UR¤Ļ뷝,TzBHo=*')jW[;fc}5X,Т&y,An ,D+`#^x_#}.`"{Hu|'>+M58> M9\+mgOz\*ۮpيDaN yRpQ=%z~ &p5v-T4Rce% ?B(%])t%{ y 8{/(hc֦lzvybm53dEY 7/vE2lV4-K&DAGn*IO:5 ?~TV)sK$a.,u=[ou%ŝy_ܵ~J߹V<Y!&d㉗ks&YhHY^(bIF4 %u)XpSE\"2RȠ ޾ftՏ0I=c(-o3FTegW6v(0T1`\?EQu5k"j:N|)zU/M > ńtjJ]38 .V6 A =.8(wڕR4=%.*q@Furˆ1ynFhI$v`: >Di3ÊV_r7H9/#,k&ݵpҟR,mlf8k[oјF_d #Q.]CLfGzSئHb3gEx=[)+y;grI(s\e.iiGh&;(ӁAbCpqnb N(81IO5饌ZFvMTdX6C*g2AZã/U3F6al+ h֗@DVRսiiؿ;B$VH#˛fuB\q_ UvE{LKx`6{_/s3x4a1͎Tlp/>85Rl+9U[w`}ivt=x{TՐvVj}q2Ըd7J^-qzJuQ!QG6|{M~bi7V^ƚm޾ "[Cy4=341 wd[bz10fEE ,-ͭCC"s=tHQ M^g|JNxNl  apMl~=5/ɗ`EO(Q* ׋~IGi?)}t#s)ύMoU@E]XN)B. ߊ3C}f 㠽5@W~0kCYS_͐b@ڈeօ׀7͑˹N@Q"ױJGe\99~I@KQ9y!Kp} շ?ny:g PI/DxrWlZ$Y&<Q;N# Hms@3oiks ­%$>io&B_mY$n1B„O@jT-\h>9*MZфg  v>԰q>ӽp2A =܂?&Fܰ%pl%V &d7)/xP?ÄY!KH^ ` c]Em\㔪J;3Z!\VޣGQR,uC,o\ W5=*C'7SqTjT+~w/*0iK "mw~)z6Maz} iTN <;ycZ&~D}IiWD7^ZdI\~|%G鼺VߑL dh0YƑSZ,Fi,*RV\\$wTlq7WILz$IY 5TUI[2kM7(8PƁEq(zQVA9F8SZͪ@N^,n#afMu+'d<;2n Hg 9CU=j*TSQMPрeuݐPVB*c%czwwG^~{@%|&fgN`? RvC7m9󱪱_4ģAtEK7t+ɝ] H3}b8׻Xt,ԄhH9",Nm^H"@̨鄝uewJ (/ibN۾I5 J)$(@3㿿7 Gi=Tr !u?tI 9bւq<\4=8y I'0GڡLd"8 Y^Qp,D;.?uEd }Ua|7>7/]"Pꐰemͩߊ)@ ՕqR6פb}@&;XnF"Tv& NKЊVNS nIcG}g#DTRXqZŬ<# jǝ);䫸/%K P:W厊2'(S/?,J[~~pQ 1mTp&vlnVY.#h7# _|Y]GvL6|eBbbZ\κ`F|:mTyFM ;mܻRW&,nt8me!LƁh2' N8]=QȱRAG4J;ވJ.]%ผq`~Hrrj .cy7j?!vkƣJ!,/IX1n?2K~!VҷF d^)9;`4hZ#CEGBmCэl"mQ)-: e056eRSH7Kg,8LȦ{\JAɞ1R<؍|Ջ IⵙhCU絭 s)?W^iyԋ 8B) zw"?f%vǣz[L;K~Hn@5aLDg TSjJZ4:<17&-; X]ռMU&9,J7JgkԪ'!{nVN1(2ʼnf`7O`H itoM/T?X/ V:FACڛlk_ 2? yҙ~k]*ԋ>َW%fȔHyUmE"+ZaoƬ%"V(St08 3!UpdRYD_:ׯ K*q/\¼\4]$;BFnwo1*n^apUiAX;|l:xGrH,~03oa$t/1VS [/1Z !H-Z튗Źҭ3;*M !Mt!+,"@A"=lu9 iV,$HXbYp\ꖭ呃K2_QCD0X02xE%op|Wtڐ .-zpph|4?g)*nkuNH|_(K y9F,JDY9^nRŷ7-I,%ҶoG%I9(!lb pjtyTT.D8*'^'iEA𘬯[lQ }(<;!&,& %=/v~/; H]5jq$ܷpP2v=R?mMa^W@><(ȥOe#R0E|ws,۹'C]o~/;TIc;Dbt/BΥ%fKD,3# øpnl_ }Z2/v1!L~wXޞM_i##[ +|LZ;UQ8㷒kG^̑b{4L2-NаPI ꬜㑓Dn%I++Y.qѤ );C\BV?Vm'=VB?|ʐs_qU6P~)͆jϓ}3KuD#FrwR- ؏<ϗ4HQX!G \D#!}v^d #.*]ҭ_J)|4(ITxk.[{ƯPZLu2v^΋~:c.S٧A I?<12:hD q  Kfl/@$^Fc{s[2V=rT Ov#h~ كH/'p/}[5$qeHr~W y73c-Wb$e > ZzmjL=a"&?Dg5JvekBSJѷF|YVyKڡ yp]3p3.E:rXõx Fqy'A39IN㮓/% ^ϰ'KAcGFB 3;33=Ќ4őEgó :nA*D ,}O`Zӭ5@ '_CߑP^ :BMt`:[._RWfrݷ3vBtuӱ9K 3!4lq~k`EK4vٕ4N:4!ke{QDA} B hG zLp?Cܶc໳w4xUbBɫ NAv B|aIqzӣ3x+yKTSY4]Kcl͑3#fFqS[YL"'_գOZ5ero0@L =a/w*B~㑻~0 (u6fRwU>|[ad,qL=Řތ+dFqi"bJEs g{EnձFLn3s癕 j_BîfhνCEap13^NKYOB 5ҺfԄW3KWrgVSmLdl-9'cc@Cotz `*m~[ ԧR[T {,?&El;q#QUo"ݥ, =,|/:ҋ܀C+viL4h 'Cqj,wvz L^'aQh ͻ?%%D3&Yj< }~&cj0V%B+e9NXV#Z؄o }Z"DI33wG.+J6ld™pz"0!au6&e8o,(Xܙ5FTTc(օV3A<mtv7[Ū˕wg{烰;%-8}[Z{%/cܲ gJ/x@0 Gkk%l  A:P?4ȵUåKZd{CTUÌGZ}AUh31,)Z7k]|tN }Fc[zw*AF&0/[{`m;z◰eCP?âSrzo3{#,)[^g&#! r|:K'IpgMl%GJ38DlDdM4ګQ7oG@Zl9ɒH~J{| @3Mb3\'JOqf YTRDD"?ąQ^^exsM3hƿU#fBJI}uS~GT?ҳfqy ɻI1%V^DG'[i&> RMМ{.g]oOVCXG'TmϘ UfG/&^yRkx~ D\Ȍ̹{qYb;UY򸎉ӞY1F{NvЊ?2G8rH偵IƏUûw#*5> 5*%G6&7AzKᩞ\O|r(kZAqK}NϭK(ܷ?5PH[̸b5"(R&j/ۮӬtf;ac14fpQʨ}fk&t{,'6ΉAec4)⭰[3ô#ff` oP:jgv ۆ, ku}ҤF>%˹%3r>}}l%m:qެV4lҒR5͑e)\T9L]$b c6TD_t̳n;:V<PG)Ki_ODEB[a(/r׶.SLR]8![f.a%󈻮tLYbȧç#<<A=v" W9J_s[ RafI_'$ŏc82Iޡc44MI#")ABv]TټN]gA.:>r$z ("Ԫ]oA#b4 `(eKg˨B\ճ~p|5 ]伓,@˻7Q>|9nac27/ a[AeU+n!PV6Qah%eK'6N)kew93Z_q@rhw֐Ol1f&A nv;u$wvh[㋽D,sT{ :{ Y!D[Gޮ"g&]v{ "爨PgH2ErC7yN}lfFi@P:!31!O!ıFDɇ} ~άgj>y΍`l#^$$b vdPF+hLƸ8y</͊ )Z?SÅ>zj!n͉49v:[=wY[5L3̠ =O] rw1ԍ|n$?Jĕ-ş'ס8pcxĴ_D3!3dAay 9{3XEZ(xhkAJ~d C'w`r, UPB&z A N_v %}$U6k4%*q˃W&+'wm֗',:B^NiNV6~ԍٺ|ǀz} Z@=P\@E>p\rmr{)=ֳ- +u4fWs'T^7 ՗Üﭒ']q:q FùΏn9?IU/$A4Gj滁oج 1[W5<:B6픃5"`==h(. q?.h3f2O䭱ACؖT%# rUDz֞p; -]G ⸀ ,Uz>o%rHkǟl3gA kY~s(pې4|J2nץ#XG|FRas+SKSbIPǹbl:;=`yFMj྾8=6e~<-(4専b ȨE.ZoVKf c>ݩqx!&5pWL/k&\ LE9!:G4ng4SCנo;P;OO}q5G둥I!uVY! 1I$o~n+s% B:0uRNaˬ ;Blj~~2z&㯖Ra#YVzMe{mucޑ%WvQd˚$hcN)QZ v`EwXr.~blM5-f{WeIr_@ ׂ- " TTرwL$nR!Da-z-\_Ụฬ^V=2ĜfH2ªDY/VF//?,蝶hdTAF%CoEN7z-!E]$tTshA-餅0v?FÞYJ}Ocν6h]4eEs'֧5O$b;NCV.Hٝ'&߼.!ozYJE J*;I{Bҏ9݄L@M9Lib n PtFM9J{*NG;{!NN]*Sw5є"MܘW]HH:]`X+F$\l܃mϷO@Dxgyͺ4__51HYZ}C} GIg=~dsKERLGHraOV(R؍Z dL-$@V2M%Ij30oPneqg]U&= +g+rA+8@?|`Sed<$铴3k*4]]510S?Y~Ld5NLǂz׉u9O D+lHhodi7 |4$j{d!ܗO ;zC,K$v6TZ6tKG* %EA"Plg`] O ܴhoĘpv4P-!厀bBZ٘}/26z[ӻ;2zB#¿wv`q z[ytigH~!I9mey8fЂ;bK<^RŐ }6{Pfv<6xo|1S}u8 ?~5Li^%e3㯪}} &[GY6g6(yz5d˚x7'=9K:>e& RWv;b EL8h.ܾ1L3:ɾYYƫa£>nG2#7Ozӕ{ Mٿ`P=K^hYc j- UAGUP=Y8AR>^Oވse|XZʐ~(+ *F[rp!6 a)w5^a,R*)`' =oRԅ_eQlt$L\ ȁR]|A&3T$6_!nefV%L 5VE Џʒ(I)^/w}atdgejidOH;P8 Aб$aX#xܯ^tx7yzqz nPs;1eg[@x~rΈXC]i^2PT,9mAB.(/+|]ݰfKZNqC}=D& X\}a yT١->^V ?z3t" O'C#dsVWCs9gHKA}ޟC?HU8-uA(jV Y7[ô9 햬aEvpThѳ__p.$?qv$( |^ /9,AHi{Id4k>j#f^3sXAp订 bt Piܮ>7]輦8F$"/8D<@kh2.5!#>yȰT\iY (GlW.G2iMKǿ?/X>NX]5kfcԖcvRq%i2l*$k1j TXɹPD@Ne?:;*eViRCS5ke:"x,E 4'big.v՟ 7"$J4$c.en$;}q9Ij X\8O(erHTTP-Lite-2.42/t/data/HTTP-Lite-Tests/bigbinary.dat.md5000644 000765 000024 00000000041 11777112371 022423 0ustar00neilbstaff000000 000000 8ace1692ff081b24f6d729f9853b28ec HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/bigtest.txt000644 000765 000024 00000013134 11777112371 021510 0ustar00neilbstaff000000 000000 _____ _ _ _ _ _ |_ _|| |__ (_) ___ (_) ___ __ _ | |_ ___ ___ | |_ | | | '_ \ | |/ __| | |/ __| / _` | | __|/ _ \/ __|| __| | | | | | || |\__ \ | |\__ \ | (_| | | |_| __/\__ \| |_ |_| |_| |_||_||___/ |_||___/ \__,_| \__|\___||___/ \__| __ _ _ _ ___ / _| __ _ | | __ _ _ __ __ _ (_) ___ | |__ / _ \ | |_ / _` | | | / _` || '__|/ _` || |/ __|| '_ \ | (_) || _| | (_| | | || (_| || | | (_| || |\__ \| | | | \___/ |_| \__,_| |_| \__,_||_| \__, ||_||___/|_| |_| |___/ __ _ _ __ _ _ _ _ / _|(_)| | ___ ___ / _| | |_ ___ __ __| |_ __| | __ _ | |_ __ _ | |_ | || | / _ \ / _ \ | |_ | __|/ _ \\ \/ /| __| / _` | / _` || __|/ _` | | _|| || || __/ | (_) || _| | |_| __/ > < | |_ | (_| || (_| || |_| (_| | |_| |_||_| \___| \___/ |_| \__|\___|/_/\_\ \__| \__,_| \__,_| \__|\__,_| __ _ ___ / _| _ __ __ _ _ __ __| | ___ _ __ ___ / _ \ | |_ | '__|/ _` || '_ \ / _` | / _ \ | '_ ` _ \ | (_) || _| | | | (_| || | | || (_| || (_) || | | | | | \___/ |_| |_| \__,_||_| |_| \__,_| \___/ |_| |_| |_| _ _ _ | | ___ _ __ __ _ | |_ | |__ | | / _ \| '_ \ / _` || __|| '_ \ | || __/| | | || (_| || |_ | | | | |_| \___||_| |_| \__, | \__||_| |_| |___/ _ _ | |(_) _ __ ___ ___ | || || '_ \ / _ \/ __| | || || | | || __/\__ \ _ |_||_||_| |_| \___||___/(_) _____ _ _ _ _ _ |_ _|| |__ (_) ___ ___ | |__ ___ _ _ | | __| | | | | '_ \ | |/ __| / __|| '_ \ / _ \ | | | || | / _` | | | | | | || |\__ \ \__ \| | | || (_) || |_| || || (_| | |_| |_| |_||_||___/ |___/|_| |_| \___/ \__,_||_| \__,_| _ _ | |__ ___ | | _ __ | '_ \ / _ \| || '_ \ | | | || __/| || |_) | |_| |_| \___||_|| .__/ |_| _ _ _ _ | |_ ___ ___ | |_ | |_ | |__ ___ | __|/ _ \/ __|| __| | __|| '_ \ / _ \ | |_| __/\__ \| |_ | |_ | | | || __/ \__|\___||___/ \__| \__||_| |_| \___| _ _ _ _ ___ | |__ _ _ _ __ | | __ ___ __| | _ __ ___ ___ __| | ___ / __|| '_ \ | | | || '_ \ | |/ // _ \ / _` | | '_ ` _ \ / _ \ / _` | / _ \ | (__ | | | || |_| || | | || <| __/| (_| | | | | | | || (_) || (_| || __/ \___||_| |_| \__,_||_| |_||_|\_\\___| \__,_| |_| |_| |_| \___/ \__,_| \___| _ __ __ | |_ _ __ __ _ _ __ ___ / _| ___ _ __ ___ / _| | __|| '__|/ _` || '_ \ / __|| |_ / _ \| '__| / _ \ | |_ | |_ | | | (_| || | | |\__ \| _|| __/| | | (_) || _| \__||_| \__,_||_| |_||___/|_| \___||_| \___/ |_| __ _ _ / _|(_)| | ___ ___ | |_ | || | / _ \/ __| | _|| || || __/\__ \ _ |_| |_||_| \___||___/(_) _____ _ _ _ _ _ |_ _|| |__ ___ _ __ ___ __ __(_)| || | __ _ | | ___ ___ | | | '_ \ / _ \| '__|/ _ \ \ \ /\ / /| || || | / _` || |/ __| / _ \ | | | | | || __/| | | __/ \ V V / | || || | | (_| || |\__ \| (_) | |_| |_| |_| \___||_| \___| \_/\_/ |_||_||_| \__,_||_||___/ \___/ _ | |__ ___ | '_ \ / _ \ | |_) || __/ |_.__/ \___| _ __ _ __ ___ ___ __| | / _| ___ _ __ __ _ | '_ \ / _ \ / _ \ / _` | | |_ / _ \ | '__| / _` | | | | || __/| __/| (_| | | _|| (_) || | | (_| | |_| |_| \___| \___| \__,_| |_| \___/ |_| \__,_| _ _ | |__ (_) _ __ __ _ _ __ _ _ | '_ \ | || '_ \ / _` || '__|| | | | | |_) || || | | || (_| || | | |_| | |_.__/ |_||_| |_| \__,_||_| \__, | |___/ _ _ _ __ __| | __ _ | |_ __ _ | |_ _ __ __ _ _ __ ___ / _| ___ _ __ / _` | / _` || __|/ _` | | __|| '__|/ _` || '_ \ / __|| |_ / _ \| '__| | (_| || (_| || |_| (_| | | |_ | | | (_| || | | |\__ \| _|| __/| | \__,_| \__,_| \__|\__,_| \__||_| \__,_||_| |_||___/|_| \___||_| _ _ | |_ ___ ___ | |_ | __|/ _ \/ __|| __| | |_| __/\__ \| |_ \__|\___||___/ \__| __ _ _ / _| __ _ (_) _ __ | | _ _ ___ ___ ___ _ __ | |_ / _` || || '__|| || | | | / __| / _ \ / _ \ | '_ \ | _|| (_| || || | | || |_| | \__ \| (_) || (_) || | | | _ |_| \__,_||_||_| |_| \__, | |___/ \___/ \___/ |_| |_|(_) |___/ _ (_) HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/chunked.cgi000644 000765 000024 00000000166 11777112371 021414 0ustar00neilbstaff000000 000000 #!/bin/sh echo Content-type: text/html echo echo chunk1 sleep 4 echo chunk2 sleep 2 echo chunk3 sleep 2 echo chunk4 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/chunked2.cgi000644 000765 000024 00000000301 11777112371 021465 0ustar00neilbstaff000000 000000 #!/bin/sh # needed for solaris for echo -n to work right SYSV3=1 export SYSV3 echo Content-type: text/html echo echo chunk1 sleep 4 echo chunk2 sleep 2 echo -n chunk3 sleep 2 echo -n chunk4 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/chunked3.cgi000644 000765 000024 00000000331 11777112371 021471 0ustar00neilbstaff000000 000000 #!/bin/sh # needed for solaris for echo -n to work right SYSV3=1 export SYSV3 echo Content-type: text/html echo echo chunk1 sleep 4 echo chunk2 sleep 2 echo -n chunk3 sleep 2 echo -n chunk4 sleep 2 echo chunk5 echo HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/chunked4.cgi000644 000765 000024 00000000335 11777112371 021476 0ustar00neilbstaff000000 000000 #!/bin/sh # needed for solaris for echo -n to work right SYSV3=1 export SYSV3 echo Content-type: text/html echo cat bigtest.txt sleep 4 cat bigtest.txt sleep 2 cat bigtest.txt sleep 2 echo -n chunk4 sleep 2 echo chunk5 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/chunked5.cgi000644 000765 000024 00000000337 11777112371 021501 0ustar00neilbstaff000000 000000 #!/bin/sh # needed for solaris for echo -n to work right SYSV3=1 export SYSV3 echo Content-type: text/html echo cat bigtest.txt sleep 4 cat bigbinary.dat sleep 2 cat bigtest.txt sleep 2 echo -n chunk4 sleep 2 echo chunk5 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/get.cgi000644 000765 000024 00000000231 11777112371 020543 0ustar00neilbstaff000000 000000 #!/usr/bin/perl use CGI; $cgi=new CGI; $a=$cgi->param('a'); $b=$cgi->param('b'); print "Content-type: text/plain\n\n"; print "a=$a\n"; print "b=$b\n"; HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/nle.html000644 000765 000024 00000000023 11777112371 020743 0ustar00neilbstaff000000 000000 line1 line2 line3 HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/nonl.html000644 000765 000024 00000000021 11777112371 021131 0ustar00neilbstaff000000 000000 line1 line2 line3HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/post.cgi000644 000765 000024 00000000231 11777112371 020751 0ustar00neilbstaff000000 000000 #!/usr/bin/perl use CGI; $cgi=new CGI; $a=$cgi->param('a'); $b=$cgi->param('b'); print "Content-type: text/plain\n\n"; print "a=$a\n"; print "b=$b\n"; HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/test.txt000644 000765 000024 00000000003 11777112371 021015 0ustar00neilbstaff000000 000000 OK HTTP-Lite-2.42/t/data/HTTP-Lite-Tests/unchunked.html000644 000765 000024 00000000041 11777112371 022151 0ustar00neilbstaff000000 000000 unchunked1 unchunked2 unchunked3 HTTP-Lite-2.42/lib/HTTP/000755 000765 000024 00000000000 12173224756 014705 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/lib/HTTP/Lite.pm000644 000765 000024 00000064125 12173224554 016144 0ustar00neilbstaff000000 000000 package HTTP::Lite; use 5.005; use strict; use Socket 1.3; use Fcntl; use Errno qw(EAGAIN); use vars qw($VERSION); BEGIN { $VERSION = "2.42"; } my $BLOCKSIZE = 65536; my $CRLF = "\r\n"; my $URLENCODE_VALID = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-."; # Forward declarations sub prepare_post; sub http_write; sub http_readline; sub http_read; sub http_readbytes; # Prepare the urlencode validchars lookup hash my @urlencode_valid; foreach my $char (split('', $URLENCODE_VALID)) { $urlencode_valid[ord $char]=$char; } for (my $n=0;$n<256;$n++) { if (!defined($urlencode_valid[$n])) { $urlencode_valid[$n]=sprintf("%%%02X", $n); } } sub new { my $self = {}; bless $self; $self->initialize(); return $self; } sub initialize { my $self = shift; $self->reset; $self->{timeout} = 120; $self->{HTTP11} = 0; $self->{DEBUG} = 0; $self->{header_at_once} = 0; $self->{holdback} = 0; # needed for http_write } sub header_at_once { my $self=shift; $self->{header_at_once} = 1; } sub local_addr { my $self = shift; my $val = shift; my $oldval = $self->{'local_addr'}; if (defined($val)) { $self->{'local_addr'} = $val; } return $oldval; } sub local_port { my $self = shift; my $val = shift; my $oldval = $self->{'local_port'}; if (defined($val)) { $self->{'local_port'} = $val; } return $oldval; } sub method { my $self = shift; my $method = shift; $method = uc($method); $self->{method} = $method; } sub DEBUG { my $self = shift; if ($self->{DEBUG}) { print STDERR join(" ", @_),"\n"; } } sub reset { my $self = shift; foreach my $var ("body", "request", "content", "status", "proxy", "proxyport", "resp-protocol", "error-message", "resp-headers", "CBARGS", "callback_function", "callback_params") { $self->{$var} = undef; } $self->{HTTPReadBuffer} = ""; $self->{method} = "GET"; $self->{headers} = { 'user-agent' => "HTTP::Lite/$VERSION" }; $self->{headermap} = { 'user-agent' => 'User-Agent' }; } # URL-encode data sub escape { my $toencode = shift; return join('', map { $urlencode_valid[ord $_] } split('', $toencode)); } sub set_callback { my ($self, $callback, @callbackparams) = @_; $self->{'callback_function'} = $callback; $self->{'callback_params'} = [ @callbackparams ]; } sub request { my ($self, $url, $data_callback, $cbargs) = @_; my $method = $self->{method}; if (defined($cbargs)) { $self->{CBARGS} = $cbargs; } my $callback_func = $self->{'callback_function'}; my $callback_params = $self->{'callback_params'}; # Parse URL my ($protocol,$host,$junk,$port,$object) = $url =~ m{^([^:/]+)://([^/:]*)(:(\d+))?(/?.*)$}; # Only HTTP is supported here if ($protocol ne "http") { warn "Only http is supported by HTTP::Lite"; return undef; } # Setup the connection my $proto = getprotobyname('tcp'); local *FH; socket(FH, PF_INET, SOCK_STREAM, $proto); $port = 80 if !$port; my $connecthost = $self->{'proxy'} || $host; $connecthost = $connecthost ? $connecthost : $host; my $connectport = $self->{'proxyport'} || $port; $connectport = $connectport ? $connectport : $port; my $addr = inet_aton($connecthost); if (!$addr) { close(FH); return undef; } if ($connecthost ne $host) { # if proxy active, use full URL as object to request $object = "$url"; } # choose local port and address my $local_addr = INADDR_ANY; my $local_port = "0"; if (defined($self->{'local_addr'})) { $local_addr = $self->{'local_addr'}; if ($local_addr eq "0.0.0.0" || $local_addr eq "0") { $local_addr = INADDR_ANY; } else { $local_addr = inet_aton($local_addr); } } if (defined($self->{'local_port'})) { $local_port = $self->{'local_port'}; } my $paddr = pack_sockaddr_in($local_port, $local_addr); bind(FH, $paddr) || return undef; # Failing to bind is fatal. my $sin = sockaddr_in($connectport,$addr); connect(FH, $sin) || return undef; # Set nonblocking IO on the handle to allow timeouts if ( $^O ne "MSWin32" ) { fcntl(FH, F_SETFL, O_NONBLOCK); } if (defined($callback_func)) { &$callback_func($self, "connect", undef, @$callback_params); } if ($self->{header_at_once}) { $self->{holdback} = 1; # http_write should buffer only, no sending yet } # Start the request (HTTP/1.1 mode) if ($self->{HTTP11}) { $self->http_write(*FH, "$method $object HTTP/1.1$CRLF"); } else { $self->http_write(*FH, "$method $object HTTP/1.0$CRLF"); } # Add some required headers # we only support a single transaction per request in this version. $self->add_req_header("Connection", "close"); if ($port != 80) { $self->add_req_header("Host", "$host:$port"); } else { $self->add_req_header("Host", $host); } if (!defined($self->get_req_header("Accept"))) { $self->add_req_header("Accept", "*/*"); } if ($method eq 'POST') { $self->http_write(*FH, "Content-Type: application/x-www-form-urlencoded$CRLF"); } # Purge a couple others $self->delete_req_header("Content-Type"); $self->delete_req_header("Content-Length"); # Output headers foreach my $header ($self->enum_req_headers()) { my $value = $self->get_req_header($header); $self->http_write(*FH, $self->{headermap}{$header}.": ".$value."$CRLF"); } my $content_length; if (defined($self->{content})) { $content_length = length($self->{content}); } if (defined($callback_func)) { my $ncontent_length = &$callback_func($self, "content-length", undef, @$callback_params); if (defined($ncontent_length)) { $content_length = $ncontent_length; } } if ($content_length) { $self->http_write(*FH, "Content-Length: $content_length$CRLF"); } if (defined($callback_func)) { &$callback_func($self, "done-headers", undef, @$callback_params); } # End of headers $self->http_write(*FH, "$CRLF"); if ($self->{header_at_once}) { $self->{holdback} = 0; $self->http_write(*FH, ""); # pseudocall to get http_write going } my $content_out = 0; if (defined($callback_func)) { while (my $content = &$callback_func($self, "content", undef, @$callback_params)) { $self->http_write(*FH, $content); $content_out++; } } # Output content, if any if (!$content_out && defined($self->{content})) { $self->http_write(*FH, $self->{content}); } if (defined($callback_func)) { &$callback_func($self, "content-done", undef, @$callback_params); } # Read response from server my $headmode=1; my $chunkmode=0; my $chunksize=0; my $chunklength=0; my $chunk; my $line = 0; my $data; while ($data = $self->http_read(*FH,$headmode,$chunkmode,$chunksize)) { $self->{DEBUG} && $self->DEBUG("reading: $chunkmode, $chunksize, $chunklength, $headmode, ". length($self->{'body'})); if ($self->{DEBUG}) { foreach my $var ("body", "request", "content", "status", "proxy", "proxyport", "resp-protocol", "error-message", "resp-headers", "CBARGS", "HTTPReadBuffer") { $self->DEBUG("state $var ".length($self->{$var})); } } $line++; if ($line == 1) { my ($proto,$status,$message) = split(' ', $$data, 3); $self->{DEBUG} && $self->DEBUG("header $$data"); $self->{status}=$status; $self->{'resp-protocol'}=$proto; $self->{'error-message'}=$message; next; } if (($headmode || $chunkmode eq "entity-header") && $$data =~ /^[\r\n]*$/) { if ($chunkmode) { $chunkmode = 0; } $headmode = 0; # Check for Transfer-Encoding my $te = $self->get_header("Transfer-Encoding"); if (defined($te)) { my $header = join(' ',@{$te}); if ($header =~ /chunked/i) { $chunkmode = "chunksize"; } } next; } if ($headmode || $chunkmode eq "entity-header") { my ($var,$datastr) = $$data =~ /^([^:]*):\s*(.*)$/; if (defined($var)) { $datastr =~s/[\r\n]$//g; $var = lc($var); $var =~ s/^(.)/&upper($1)/ge; $var =~ s/(-.)/&upper($1)/ge; my $hr = ${$self->{'resp-headers'}}{$var}; if (!ref($hr)) { $hr = [ $datastr ]; } else { push @{ $hr }, $datastr; } ${$self->{'resp-headers'}}{$var} = $hr; } } elsif ($chunkmode) { if ($chunkmode eq "chunksize") { $chunksize = $$data; $chunksize =~ s/^\s*|;.*$//g; $chunksize =~ s/\s*$//g; my $cshx = $chunksize; if (length($chunksize) > 0) { # read another line if ($chunksize !~ /^[a-f0-9]+$/i) { $self->{DEBUG} && $self->DEBUG("chunksize not a hex string"); } $chunksize = hex($chunksize); $self->{DEBUG} && $self->DEBUG("chunksize was $chunksize (HEX was $cshx)"); if ($chunksize == 0) { $chunkmode = "entity-header"; } else { $chunkmode = "chunk"; $chunklength = 0; } } else { $self->{DEBUG} && $self->DEBUG("chunksize empty string, checking next line!"); } } elsif ($chunkmode eq "chunk") { $chunk .= $$data; $chunklength += length($$data); if ($chunklength >= $chunksize) { $chunkmode = "chunksize"; if ($chunklength > $chunksize) { $chunk = substr($chunk,0,$chunksize); } elsif ($chunklength == $chunksize && $chunk !~ /$CRLF$/) { # chunk data is exactly chunksize -- need CRLF still $chunkmode = "ignorecrlf"; } $self->add_to_body(\$chunk, $data_callback); $chunk=""; $chunklength = 0; $chunksize = ""; } } elsif ($chunkmode eq "ignorecrlf") { $chunkmode = "chunksize"; } } else { $self->add_to_body($data, $data_callback); } } if (defined($callback_func)) { &$callback_func($self, "done", undef, @$callback_params); } close(FH); return $self->{status}; } sub add_to_body { my $self = shift; my ($dataref, $data_callback) = @_; my $callback_func = $self->{'callback_function'}; my $callback_params = $self->{'callback_params'}; if (!defined($data_callback) && !defined($callback_func)) { $self->{DEBUG} && $self->DEBUG("no callback"); $self->{'body'}.=$$dataref; } else { my $newdata; if (defined($callback_func)) { $newdata = &$callback_func($self, "data", $dataref, @$callback_params); } else { $newdata = &$data_callback($self, $dataref, $self->{CBARGS}); } if ($self->{DEBUG}) { $self->DEBUG("callback got back a ".ref($newdata)); if (ref($newdata) eq "SCALAR") { $self->DEBUG("callback got back ".length($$newdata)." bytes"); } } if (defined($newdata) && ref($newdata) eq "SCALAR") { $self->{'body'} .= $$newdata; } } } sub add_req_header { my $self = shift; my ($header, $value) = @_; return unless defined($value); my $lcheader = lc($header); $self->{DEBUG} && $self->DEBUG("add_req_header $header $value"); ${$self->{headers}}{$lcheader} = $value; ${$self->{headermap}}{$lcheader} = $header; } sub get_req_header { my $self = shift; my ($header) = @_; return $self->{headers}{lc($header)}; } sub delete_req_header { my $self = shift; my ($header) = @_; my $exists; if ($exists=defined(${$self->{headers}}{lc($header)})) { delete ${$self->{headers}}{lc($header)}; delete ${$self->{headermap}}{lc($header)}; } return $exists; } sub enum_req_headers { my $self = shift; my ($header) = @_; my $exists; return keys %{$self->{headermap}}; } sub body { my $self = shift; return $self->{'body'}; } sub status { my $self = shift; return $self->{status}; } sub protocol { my $self = shift; return $self->{'resp-protocol'}; } sub status_message { my $self = shift; return $self->{'error-message'}; } sub proxy { my $self = shift; my ($value) = @_; # Parse URL my ($protocol,$host,$junk,$port,$object) = $value =~ m{^(\S+)://([^/:]*)(:(\d+))?(/.*)$}; if (!$host) { ($host,$port) = $value =~ /^([^:]+):(.*)$/; } $self->{'proxy'} = $host || $value; $self->{'proxyport'} = $port || 80; } sub headers_array { my $self = shift; my @array = (); foreach my $header (keys %{$self->{'resp-headers'}}) { my $aref = ${$self->{'resp-headers'}}{$header}; foreach my $value (@$aref) { push @array, "$header: $value"; } } return @array; } sub headers_string { my $self = shift; my $string = ""; foreach my $header (keys %{$self->{'resp-headers'}}) { my $aref = ${$self->{'resp-headers'}}{$header}; foreach my $value (@$aref) { $string .= "$header: $value\n"; } } return $string; } sub get_header { my $self = shift; my $header = shift; return $self->{'resp-headers'}{$header}; } sub http11_mode { my $self = shift; my $mode = shift; $self->{HTTP11} = $mode; } sub prepare_post { my $self = shift; my $varref = shift; my $body = ""; while (my ($var,$value) = map { escape($_) } each %$varref) { if ($body) { $body .= "&$var=$value"; } else { $body = "$var=$value"; } } $self->{content} = $body; $self->{headers}{'Content-Type'} = "application/x-www-form-urlencoded" unless defined ($self->{headers}{'Content-Type'}) and $self->{headers}{'Content-Type'}; $self->{method} = "POST"; } sub http_write { my $self = shift; my ($fh,$line) = @_; if ($self->{holdback}) { $self->{HTTPWriteBuffer} .= $line; return; } else { if (defined $self->{HTTPWriteBuffer}) { # copy previously buffered, if any $line = $self->{HTTPWriteBuffer} . $line; } } my $size = length($line); my $total_sent = 0; my $nbytes; do { $nbytes = syswrite($fh, $line, $size - $total_sent, $total_sent ); die $! unless(defined($nbytes) || $!{EAGAIN}); # non-recoverable error occurred! $total_sent += $nbytes; } while ($total_sent < $size); } sub http_read { my $self = shift; my ($fh,$headmode,$chunkmode,$chunksize) = @_; $self->{DEBUG} && $self->DEBUG("read handle=$fh, headm=$headmode, chunkm=$chunkmode, chunksize=$chunksize"); my $res; if (($headmode == 0 && $chunkmode eq "0") || ($chunkmode eq "chunk")) { my $bytes_to_read = $chunkmode eq "chunk" ? ($chunksize < $BLOCKSIZE ? $chunksize : $BLOCKSIZE) : $BLOCKSIZE; $res = $self->http_readbytes($fh,$self->{timeout},$bytes_to_read); } else { $res = $self->http_readline($fh,$self->{timeout}); } if ($res) { if ($self->{DEBUG}) { $self->DEBUG("read got ".length($$res)." bytes"); my $str = $$res; $str =~ s{([\x00-\x1F\x7F-\xFF])}{.}g; $self->DEBUG("read: ".$str); } } return $res; } sub http_readline { my $self = shift; my ($fh, $timeout) = @_; my $EOL = "\n"; $self->{DEBUG} && $self->DEBUG("readline handle=$fh, timeout=$timeout"); # is there a line in the buffer yet? while ($self->{HTTPReadBuffer} !~ /$EOL/) { # nope -- wait for incoming data my ($inbuf,$bits,$chars) = ("","",0); vec($bits,fileno($fh),1)=1; my $nfound = select($bits, undef, $bits, $timeout); if ($nfound == 0) { # Timed out return undef; } else { # Get the data $chars = sysread($fh, $inbuf, $BLOCKSIZE); $self->{DEBUG} && $self->DEBUG("sysread $chars bytes"); } # End of stream? if ($chars <= 0 && !$!{EAGAIN}) { last; } # tag data onto end of buffer $self->{HTTPReadBuffer}.=$inbuf; } # get a single line from the buffer my $nlat = index($self->{HTTPReadBuffer}, $EOL); my $newline; my $oldline; if ($nlat > -1) { $newline = substr($self->{HTTPReadBuffer},0,$nlat+1); $oldline = substr($self->{HTTPReadBuffer},$nlat+1); } else { $newline = substr($self->{HTTPReadBuffer},0); $oldline = ""; } # and update the buffer $self->{HTTPReadBuffer}=$oldline; return length($newline) ? \$newline : 0; } sub http_readbytes { my $self = shift; my ($fh, $timeout, $bytes) = @_; my $EOL = "\n"; $self->{DEBUG} && $self->DEBUG("readbytes handle=$fh, timeout=$timeout, bytes=$bytes"); # is there enough data in the buffer yet? while (length($self->{HTTPReadBuffer}) < $bytes) { # nope -- wait for incoming data my ($inbuf,$bits,$chars) = ("","",0); vec($bits,fileno($fh),1)=1; my $nfound = select($bits, undef, $bits, $timeout); if ($nfound == 0) { # Timed out return undef; } else { # Get the data $chars = sysread($fh, $inbuf, $BLOCKSIZE); $self->{DEBUG} && $self->DEBUG("sysread $chars bytes"); } # End of stream? if ($chars <= 0 && !$!{EAGAIN}) { last; } # tag data onto end of buffer $self->{HTTPReadBuffer}.=$inbuf; } my $newline; my $buflen; if (($buflen=length($self->{HTTPReadBuffer})) >= $bytes) { $newline = substr($self->{HTTPReadBuffer},0,$bytes+1); if ($bytes+1 < $buflen) { $self->{HTTPReadBuffer} = substr($self->{HTTPReadBuffer},$bytes+1); } else { $self->{HTTPReadBuffer} = ""; } } else { $newline = substr($self->{HTTPReadBuffer},0); $self->{HTTPReadBuffer} = ""; } return length($newline) ? \$newline : 0; } sub upper { my ($str) = @_; if (defined($str)) { return uc($str); } else { return undef; } } 1; __END__ =pod =head1 NAME HTTP::Lite - Lightweight HTTP implementation =head1 SYNOPSIS use HTTP::Lite; $http = HTTP::Lite->new; $req = $http->request("http://www.cpan.org/") or die "Unable to get document: $!"; print $http->body(); =head1 DESCRIPTION HTTP::Lite is a stand-alone lightweight HTTP/1.1 implementation for perl. It is not intended as a replacement for the fully-featured LWP module. Instead, it is intended for use in situations where it is desirable to install the minimal number of modules to achieve HTTP support, or where LWP is not a good candidate due to CPU overhead, such as slower processors. HTTP::Lite is also significantly faster than LWP. HTTP::Lite is ideal for CGI (or mod_perl) programs or for bundling for redistribution with larger packages where only HTTP GET and POST functionality are necessary. HTTP::Lite supports basic POST and GET operations only. As of 0.2.1, HTTP::Lite supports HTTP/1.1 and is compliant with the Host header, necessary for name based virtual hosting. Additionally, HTTP::Lite now supports Proxies. As of 2.0.0 HTTP::Lite now supports a callback to allow processing of request data as it arrives. This is useful for handling very large files without consuming memory. If you require more functionality, such as FTP or HTTPS, please see libwwwperl (LWP). LWP is a significantly better and more comprehensive package than HTTP::Lite, and should be used instead of HTTP::Lite whenever possible. =head1 CONSTRUCTOR =over 4 =item new This is the constructor for HTTP::Lite. It presently takes no arguments. A future version of HTTP::Lite might accept parameters. =back =head1 METHODS =over 4 =item request ( $url, $data_callback, $cbargs ) Initiates a request to the specified URL. Returns undef if an I/O error is encountered, otherwise the HTTP status code will be returned. 200 series status codes represent success, 300 represent temporary errors, 400 represent permanent errors, and 500 represent server errors. See F for detailed information about HTTP status codes. The $data_callback parameter, if used, is a way to filter the data as it is received or to handle large transfers. It must be a function reference, and will be passed: a reference to the instance of the http request making the callback, a reference to the current block of data about to be added to the body, and the $cbargs parameter (which may be anything). It must return either a reference to the data to add to the body of the document, or undef. If set_callback is used, $data_callback and $cbargs are not used. $cbargs may be either a scalar or a reference. The data_callback is called as: &$data_callback( $self, $dataref, $cbargs ) An example use to save a document to file is: # Write the data to the filehandle $cbargs sub savetofile { my ($self,$phase,$dataref,$cbargs) = @_; print $cbargs $$dataref; return undef; } $url = "$testpath/bigbinary.dat"; open OUT, '>','bigbinary.dat'; $res = $http->request($url, \&savetofile, OUT); close OUT; =item set_callback ( $functionref, $dataref ) At various stages of the request, callbacks may be used to modify the behaviour or to monitor the status of the request. These work like the $data_callback parameter to request(), but are more versatile. Using set_callback disables $data_callback in request() The callbacks are called as: callback ( $self, $phase, $dataref, $cbargs ) The current phases are: connect - connection has been established and headers are being transmitted. content-length - return value is used as the content-length. If undef, and prepare_post() was used, the content length is calculated. done-headers - all headers have been sent content - return value is used as content and is sent to client. Return undef to use the internal content defined by prepare_post(). content-done - content has been successfuly transmitted. data - A block of data has been received. The data is referenced by $dataref. The return value is dereferenced and replaces the content passed in. Return undef to avoid using memory for large documents. done - Request is done. =item prepare_post ( $hashref ) Takes a reference to a hashed array of post form variables to upload. Create the HTTP body and sets the method to POST. =item http11_mode ( 0 | 1 ) Turns on or off HTTP/1.1 support. This is off by default due to broken HTTP/1.1 servers. Use 1 to enable HTTP/1.1 support. =item add_req_header ( $header, $value ) =item get_req_header ( $header ) =item delete_req_header ( $header ) Add, Delete, or get a HTTP header(s) for the request. These functions allow you to override any header. Presently, Host, User-Agent, Content-Type, Accept, and Connection are pre-defined by the HTTP::Lite module. You may not override Host, Connection, or Accept. If you call C with C<$value> set to C, then the header won't be added. To provide (proxy) authentication or authorization, you would use: use HTTP::Lite; use MIME::Base64; $http = HTTP::Lite->new; $encoded = encode_base64('username:password'); $http->add_req_header("Authorization", $encoded); B: The present implementation limits you to one instance of each header. =item body Returns the body of the document returned by the remote server. =item headers_array Returns an array of the HTTP headers returned by the remote server. =item headers_string Returns a string representation of the HTTP headers returned by the remote server. =item get_header ( $header ) Returns an array of values for the requested header. B: HTTP requests are not limited to a single instance of each header. As a result, there may be more than one entry for every header. =item protocol Returns the HTTP protocol identifier, as reported by the remote server. This will generally be either HTTP/1.0 or HTTP/1.1. =item proxy ( $proxy_server ) The URL or hostname of the proxy to use for the next request. =item status Returns the HTTP status code returned by the server. This is also reported as the return value of I. =item status_message Returns the textual description of the status code as returned by the server. The status string is not required to adhere to any particular format, although most HTTP servers use a standard set of descriptions. =item reset You must call this prior to re-using an HTTP::Lite handle, otherwise the results are undefined. =item local_addr ( $ip ) Explicity select the local IP address. 0.0.0.0 (default) lets the system choose. =item local_port ( $port ) Explicity select the local port. 0 (default and recommended) lets the system choose. =item method ( $method ) Explicity set the method. Using prepare_post or reset overrides this setting. Usual choices are GET, POST, PUT, HEAD =back =head1 EXAMPLES # Get and print out the headers and body of the CPAN homepage use HTTP::Lite; $http = HTTP::Lite->new; $req = $http->request("http://www.cpan.org/") or die "Unable to get document: $!"; die "Request failed ($req): ".$http->status_message() if $req ne "200"; @headers = $http->headers_array(); $body = $http->body(); foreach $header (@headers) { print "$header$CRLF"; } print "$CRLF"; print "$body$CRLF"; # POST a query to the dejanews USENET search engine use HTTP::Lite; $http = HTTP::Lite->new; %vars = ( "QRY" => "perl", "ST" => "MS", "svcclass" => "dncurrent", "DBS" => "2" ); $http->prepare_post(\%vars); $req = $http->request("http://www.deja.com/dnquery.xp") or die "Unable to get document: $!"; print "req: $req\n"; print $http->body(); =head1 UNIMPLEMENTED - FTP - HTTPS (SSL) - Authenitcation/Authorizaton/Proxy-Authorization are not directly supported, and require MIME::Base64. - Redirects (Location) are not automatically followed - multipart/form-data POSTs are not directly supported (necessary for File uploads). =head1 BUGS Some broken HTTP/1.1 servers send incorrect chunk sizes when transferring files. HTTP/1.1 mode is now disabled by default. =head1 AUTHOR Roy Hooper Now co-maintained by Neil Bowers Eneilb@cpan.orgE. This is a developer release after fixing some bugs, before doing a regular release. =head1 SEE ALSO L RFC 2068 - HTTP/1.1 -http://www.w3.org/ =head1 COPYRIGHT Copyright (c) 2000-2002 Roy Hooper. All rights reserved. Some parts copyright 2009 - 2010 Adam Kennedy. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut HTTP-Lite-2.42/inc/Module/000755 000765 000024 00000000000 12173224756 015356 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/inc/Module/Install/000755 000765 000024 00000000000 12173224756 016764 5ustar00neilbstaff000000 000000 HTTP-Lite-2.42/inc/Module/Install.pm000644 000765 000024 00000030135 11777112371 017322 0ustar00neilbstaff000000 000000 #line 1 package Module::Install; # For any maintainers: # The load order for Module::Install is a bit magic. # It goes something like this... # # IF ( host has Module::Install installed, creating author mode ) { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install # 3. The installed version of inc::Module::Install loads # 4. inc::Module::Install calls "require Module::Install" # 5. The ./inc/ version of Module::Install loads # } ELSE { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install # 3. The ./inc/ version of Module::Install loads # } use 5.005; use strict 'vars'; use Cwd (); use File::Find (); use File::Path (); use vars qw{$VERSION $MAIN}; BEGIN { # All Module::Install core packages now require synchronised versions. # This will be used to ensure we don't accidentally load old or # different versions of modules. # This is not enforced yet, but will be some time in the next few # releases once we can make sure it won't clash with custom # Module::Install extensions. $VERSION = '1.00'; # Storage for the pseudo-singleton $MAIN = undef; *inc::Module::Install::VERSION = *VERSION; @inc::Module::Install::ISA = __PACKAGE__; } sub import { my $class = shift; my $self = $class->new(@_); my $who = $self->_caller; #------------------------------------------------------------- # all of the following checks should be included in import(), # to allow "eval 'require Module::Install; 1' to test # installation of Module::Install. (RT #51267) #------------------------------------------------------------- # Whether or not inc::Module::Install is actually loaded, the # $INC{inc/Module/Install.pm} is what will still get set as long as # the caller loaded module this in the documented manner. # If not set, the caller may NOT have loaded the bundled version, and thus # they may not have a MI version that works with the Makefile.PL. This would # result in false errors or unexpected behaviour. And we don't want that. my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm'; unless ( $INC{$file} ) { die <<"END_DIE" } Please invoke ${\__PACKAGE__} with: use inc::${\__PACKAGE__}; not: use ${\__PACKAGE__}; END_DIE # This reportedly fixes a rare Win32 UTC file time issue, but # as this is a non-cross-platform XS module not in the core, # we shouldn't really depend on it. See RT #24194 for detail. # (Also, this module only supports Perl 5.6 and above). eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006; # If the script that is loading Module::Install is from the future, # then make will detect this and cause it to re-run over and over # again. This is bad. Rather than taking action to touch it (which # is unreliable on some platforms and requires write permissions) # for now we should catch this and refuse to run. if ( -f $0 ) { my $s = (stat($0))[9]; # If the modification time is only slightly in the future, # sleep briefly to remove the problem. my $a = $s - time; if ( $a > 0 and $a < 5 ) { sleep 5 } # Too far in the future, throw an error. my $t = time; if ( $s > $t ) { die <<"END_DIE" } Your installer $0 has a modification time in the future ($s > $t). This is known to create infinite loops in make. Please correct this, then run $0 again. END_DIE } # Build.PL was formerly supported, but no longer is due to excessive # difficulty in implementing every single feature twice. if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" } Module::Install no longer supports Build.PL. It was impossible to maintain duel backends, and has been deprecated. Please remove all Build.PL files and only use the Makefile.PL installer. END_DIE #------------------------------------------------------------- # To save some more typing in Module::Install installers, every... # use inc::Module::Install # ...also acts as an implicit use strict. $^H |= strict::bits(qw(refs subs vars)); #------------------------------------------------------------- unless ( -f $self->{file} ) { foreach my $key (keys %INC) { delete $INC{$key} if $key =~ /Module\/Install/; } local $^W; require "$self->{path}/$self->{dispatch}.pm"; File::Path::mkpath("$self->{prefix}/$self->{author}"); $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self ); $self->{admin}->init; @_ = ($class, _self => $self); goto &{"$self->{name}::import"}; } local $^W; *{"${who}::AUTOLOAD"} = $self->autoload; $self->preload; # Unregister loader and worker packages so subdirs can use them again delete $INC{'inc/Module/Install.pm'}; delete $INC{'Module/Install.pm'}; # Save to the singleton $MAIN = $self; return 1; } sub autoload { my $self = shift; my $who = $self->_caller; my $cwd = Cwd::cwd(); my $sym = "${who}::AUTOLOAD"; $sym->{$cwd} = sub { my $pwd = Cwd::cwd(); if ( my $code = $sym->{$pwd} ) { # Delegate back to parent dirs goto &$code unless $cwd eq $pwd; } unless ($$sym =~ s/([^:]+)$//) { # XXX: it looks like we can't retrieve the missing function # via $$sym (usually $main::AUTOLOAD) in this case. # I'm still wondering if we should slurp Makefile.PL to # get some context or not ... my ($package, $file, $line) = caller; die <<"EOT"; Unknown function is found at $file line $line. Execution of $file aborted due to runtime errors. If you're a contributor to a project, you may need to install some Module::Install extensions from CPAN (or other repository). If you're a user of a module, please contact the author. EOT } my $method = $1; if ( uc($method) eq $method ) { # Do nothing return; } elsif ( $method =~ /^_/ and $self->can($method) ) { # Dispatch to the root M:I class return $self->$method(@_); } # Dispatch to the appropriate plugin unshift @_, ( $self, $1 ); goto &{$self->can('call')}; }; } sub preload { my $self = shift; unless ( $self->{extensions} ) { $self->load_extensions( "$self->{prefix}/$self->{path}", $self ); } my @exts = @{$self->{extensions}}; unless ( @exts ) { @exts = $self->{admin}->load_all_extensions; } my %seen; foreach my $obj ( @exts ) { while (my ($method, $glob) = each %{ref($obj) . '::'}) { next unless $obj->can($method); next if $method =~ /^_/; next if $method eq uc($method); $seen{$method}++; } } my $who = $self->_caller; foreach my $name ( sort keys %seen ) { local $^W; *{"${who}::$name"} = sub { ${"${who}::AUTOLOAD"} = "${who}::$name"; goto &{"${who}::AUTOLOAD"}; }; } } sub new { my ($class, %args) = @_; delete $INC{'FindBin.pm'}; { # to suppress the redefine warning local $SIG{__WARN__} = sub {}; require FindBin; } # ignore the prefix on extension modules built from top level. my $base_path = Cwd::abs_path($FindBin::Bin); unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) { delete $args{prefix}; } return $args{_self} if $args{_self}; $args{dispatch} ||= 'Admin'; $args{prefix} ||= 'inc'; $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author'); $args{bundle} ||= 'inc/BUNDLES'; $args{base} ||= $base_path; $class =~ s/^\Q$args{prefix}\E:://; $args{name} ||= $class; $args{version} ||= $class->VERSION; unless ( $args{path} ) { $args{path} = $args{name}; $args{path} =~ s!::!/!g; } $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm"; $args{wrote} = 0; bless( \%args, $class ); } sub call { my ($self, $method) = @_; my $obj = $self->load($method) or return; splice(@_, 0, 2, $obj); goto &{$obj->can($method)}; } sub load { my ($self, $method) = @_; $self->load_extensions( "$self->{prefix}/$self->{path}", $self ) unless $self->{extensions}; foreach my $obj (@{$self->{extensions}}) { return $obj if $obj->can($method); } my $admin = $self->{admin} or die <<"END_DIE"; The '$method' method does not exist in the '$self->{prefix}' path! Please remove the '$self->{prefix}' directory and run $0 again to load it. END_DIE my $obj = $admin->load($method, 1); push @{$self->{extensions}}, $obj; $obj; } sub load_extensions { my ($self, $path, $top) = @_; my $should_reload = 0; unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) { unshift @INC, $self->{prefix}; $should_reload = 1; } foreach my $rv ( $self->find_extensions($path) ) { my ($file, $pkg) = @{$rv}; next if $self->{pathnames}{$pkg}; local $@; my $new = eval { local $^W; require $file; $pkg->can('new') }; unless ( $new ) { warn $@ if $@; next; } $self->{pathnames}{$pkg} = $should_reload ? delete $INC{$file} : $INC{$file}; push @{$self->{extensions}}, &{$new}($pkg, _top => $top ); } $self->{extensions} ||= []; } sub find_extensions { my ($self, $path) = @_; my @found; File::Find::find( sub { my $file = $File::Find::name; return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is; my $subpath = $1; return if lc($subpath) eq lc($self->{dispatch}); $file = "$self->{path}/$subpath.pm"; my $pkg = "$self->{name}::$subpath"; $pkg =~ s!/!::!g; # If we have a mixed-case package name, assume case has been preserved # correctly. Otherwise, root through the file to locate the case-preserved # version of the package name. if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) { my $content = Module::Install::_read($subpath . '.pm'); my $in_pod = 0; foreach ( split //, $content ) { $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); # skip pod text next if /^\s*#/; # and comments if ( m/^\s*package\s+($pkg)\s*;/i ) { $pkg = $1; last; } } } push @found, [ $file, $pkg ]; }, $path ) if -d $path; @found; } ##################################################################### # Common Utility Functions sub _caller { my $depth = 0; my $call = caller($depth); while ( $call eq __PACKAGE__ ) { $depth++; $call = caller($depth); } return $call; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _read { local *FH; open( FH, '<', $_[0] ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_NEW sub _read { local *FH; open( FH, "< $_[0]" ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_OLD sub _readperl { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s; $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg; return $string; } sub _readpod { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; return $string if $_[0] =~ /\.pod\z/; $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg; $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg; $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg; $string =~ s/^\n+//s; return $string; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _write { local *FH; open( FH, '>', $_[0] ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_NEW sub _write { local *FH; open( FH, "> $_[0]" ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_OLD # _version is for processing module versions (eg, 1.03_05) not # Perl versions (eg, 5.8.1). sub _version ($) { my $s = shift || 0; my $d =()= $s =~ /(\.)/g; if ( $d >= 2 ) { # Normalise multipart versions $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg; } $s =~ s/^(\d+)\.?//; my $l = $1 || 0; my @v = map { $_ . '0' x (3 - length $_) } $s =~ /(\d{1,3})\D?/g; $l = $l . '.' . join '', @v if @v; return $l + 0; } sub _cmp ($$) { _version($_[0]) <=> _version($_[1]); } # Cloned from Params::Util::_CLASS sub _CLASS ($) { ( defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s ) ? $_[0] : undef; } 1; # Copyright 2008 - 2010 Adam Kennedy. HTTP-Lite-2.42/inc/Module/Install/Base.pm000644 000765 000024 00000002147 11777112371 020176 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::Base; use strict 'vars'; use vars qw{$VERSION}; BEGIN { $VERSION = '1.00'; } # Suspend handler for "redefined" warnings BEGIN { my $w = $SIG{__WARN__}; $SIG{__WARN__} = sub { $w }; } #line 42 sub new { my $class = shift; unless ( defined &{"${class}::call"} ) { *{"${class}::call"} = sub { shift->_top->call(@_) }; } unless ( defined &{"${class}::load"} ) { *{"${class}::load"} = sub { shift->_top->load(@_) }; } bless { @_ }, $class; } #line 61 sub AUTOLOAD { local $@; my $func = eval { shift->_top->autoload } or return; goto &$func; } #line 75 sub _top { $_[0]->{_top}; } #line 90 sub admin { $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new; } #line 106 sub is_admin { ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin'); } sub DESTROY {} package Module::Install::Base::FakeAdmin; use vars qw{$VERSION}; BEGIN { $VERSION = $Module::Install::Base::VERSION; } my $fake; sub new { $fake ||= bless(\@_, $_[0]); } sub AUTOLOAD {} sub DESTROY {} # Restore warning handler BEGIN { $SIG{__WARN__} = $SIG{__WARN__}->(); } 1; #line 159 HTTP-Lite-2.42/inc/Module/Install/Can.pm000644 000765 000024 00000003333 11777112371 020023 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::Can; use strict; use Config (); use File::Spec (); use ExtUtils::MakeMaker (); use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.00'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # check if we can load some module ### Upgrade this to not have to load the module if possible sub can_use { my ($self, $mod, $ver) = @_; $mod =~ s{::|\\}{/}g; $mod .= '.pm' unless $mod =~ /\.pm$/i; my $pkg = $mod; $pkg =~ s{/}{::}g; $pkg =~ s{\.pm$}{}i; local $@; eval { require $mod; $pkg->VERSION($ver || 0); 1 }; } # check if we can run some command sub can_run { my ($self, $cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { next if $dir eq ''; my $abs = File::Spec->catfile($dir, $_[1]); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # can we locate a (the) C compiler sub can_cc { my $self = shift; my @chunks = split(/ /, $Config::Config{cc}) or return; # $Config{cc} may contain args; try to find out the program part while (@chunks) { return $self->can_run("@chunks") || (pop(@chunks), next); } return; } # Fix Cygwin bug on maybe_command(); if ( $^O eq 'cygwin' ) { require ExtUtils::MM_Cygwin; require ExtUtils::MM_Win32; if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { *ExtUtils::MM_Cygwin::maybe_command = sub { my ($self, $file) = @_; if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { ExtUtils::MM_Win32->maybe_command($file); } else { ExtUtils::MM_Unix->maybe_command($file); } } } } 1; __END__ #line 156 HTTP-Lite-2.42/inc/Module/Install/DSL.pm000644 000765 000024 00000004250 11777112371 017743 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::DSL; use strict; use vars qw{$VERSION $ISCORE}; BEGIN { $VERSION = '1.00'; $ISCORE = 1; *inc::Module::Install::DSL::VERSION = *VERSION; @inc::Module::Install::DSL::ISA = __PACKAGE__; } sub import { # Read in the rest of the Makefile.PL open 0 or die "Couldn't open $0: $!"; my $dsl; SCOPE: { local $/ = undef; $dsl = join "", <0>; } # Change inc::Module::Install::DSL to the regular one. # Remove anything before the use inc::... line. $dsl =~ s/.*?^\s*use\s+(?:inc::)?Module::Install::DSL(\b[^;]*);\s*\n//sm; # Load inc::Module::Install as we would in a regular Makefile.Pl SCOPE: { package main; require inc::Module::Install; inc::Module::Install->import; } # Add the ::DSL plugin to the list of packages in /inc my $admin = $Module::Install::MAIN->{admin}; if ( $admin ) { my $from = $INC{"$admin->{path}/DSL.pm"}; my $to = "$admin->{base}/$admin->{prefix}/$admin->{path}/DSL.pm"; $admin->copy( $from => $to ); } # Convert the basic syntax to code my $code = "INIT {\n" . "package main;\n\n" . dsl2code($dsl) . "\n\nWriteAll();\n" . "}\n"; # Execute the script eval $code; print STDERR "Failed to execute the generated code...\n$@" if $@; exit(0); } sub dsl2code { my $dsl = shift; # Split into lines and strip blanks my @lines = grep { /\S/ } split /[\012\015]+/, $dsl; # Each line represents one command my @code = (); foreach my $line ( @lines ) { # Split the lines into tokens my @tokens = split /\s+/, $line; # The first word is the command my $command = shift @tokens; my @params = (); my @suffix = (); while ( @tokens ) { my $token = shift @tokens; if ( $token eq 'if' or $token eq 'unless' ) { # This is the beginning of a suffix push @suffix, $token; push @suffix, @tokens; last; } else { # Convert to a string $token =~ s/([\\\'])/\\$1/g; push @params, "'$token'"; } }; # Merge to create the final line of code @tokens = ( $command, @params ? join( ', ', @params ) : (), @suffix ); push @code, join( ' ', @tokens ) . ";\n"; } # Join into the complete code block return join( '', @code ); } 1; HTTP-Lite-2.42/inc/Module/Install/Fetch.pm000644 000765 000024 00000004627 11777112371 020362 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::Fetch; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.00'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub get_file { my ($self, %args) = @_; my ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) { $args{url} = $args{ftp_url} or (warn("LWP support unavailable!\n"), return); ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; } $|++; print "Fetching '$file' from $host... "; unless (eval { require Socket; Socket::inet_aton($host) }) { warn "'$host' resolve failed!\n"; return; } return unless $scheme eq 'ftp' or $scheme eq 'http'; require Cwd; my $dir = Cwd::getcwd(); chdir $args{local_dir} or return if exists $args{local_dir}; if (eval { require LWP::Simple; 1 }) { LWP::Simple::mirror($args{url}, $file); } elsif (eval { require Net::FTP; 1 }) { eval { # use Net::FTP to get past firewall my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600); $ftp->login("anonymous", 'anonymous@example.com'); $ftp->cwd($path); $ftp->binary; $ftp->get($file) or (warn("$!\n"), return); $ftp->quit; } } elsif (my $ftp = $self->can_run('ftp')) { eval { # no Net::FTP, fallback to ftp.exe require FileHandle; my $fh = FileHandle->new; local $SIG{CHLD} = 'IGNORE'; unless ($fh->open("|$ftp -n")) { warn "Couldn't open ftp: $!\n"; chdir $dir; return; } my @dialog = split(/\n/, <<"END_FTP"); open $host user anonymous anonymous\@example.com cd $path binary get $file $file quit END_FTP foreach (@dialog) { $fh->print("$_\n") } $fh->close; } } else { warn "No working 'ftp' program available!\n"; chdir $dir; return; } unless (-f $file) { warn "Fetching failed: $@\n"; chdir $dir; return; } return if exists $args{size} and -s $file != $args{size}; system($args{run}) if exists $args{run}; unlink($file) if $args{remove}; print(((!exists $args{check_for} or -e $args{check_for}) ? "done!" : "failed! ($!)"), "\n"); chdir $dir; return !$?; } 1; HTTP-Lite-2.42/inc/Module/Install/Makefile.pm000644 000765 000024 00000027032 11777112371 021041 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::Makefile; use strict 'vars'; use ExtUtils::MakeMaker (); use Module::Install::Base (); use Fcntl qw/:flock :seek/; use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.00'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub Makefile { $_[0] } my %seen = (); sub prompt { shift; # Infinite loop protection my @c = caller(); if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) { die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])"; } # In automated testing or non-interactive session, always use defaults if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) { local $ENV{PERL_MM_USE_DEFAULT} = 1; goto &ExtUtils::MakeMaker::prompt; } else { goto &ExtUtils::MakeMaker::prompt; } } # Store a cleaned up version of the MakeMaker version, # since we need to behave differently in a variety of # ways based on the MM version. my $makemaker = eval $ExtUtils::MakeMaker::VERSION; # If we are passed a param, do a "newer than" comparison. # Otherwise, just return the MakeMaker version. sub makemaker { ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0 } # Ripped from ExtUtils::MakeMaker 6.56, and slightly modified # as we only need to know here whether the attribute is an array # or a hash or something else (which may or may not be appendable). my %makemaker_argtype = ( C => 'ARRAY', CONFIG => 'ARRAY', # CONFIGURE => 'CODE', # ignore DIR => 'ARRAY', DL_FUNCS => 'HASH', DL_VARS => 'ARRAY', EXCLUDE_EXT => 'ARRAY', EXE_FILES => 'ARRAY', FUNCLIST => 'ARRAY', H => 'ARRAY', IMPORTS => 'HASH', INCLUDE_EXT => 'ARRAY', LIBS => 'ARRAY', # ignore '' MAN1PODS => 'HASH', MAN3PODS => 'HASH', META_ADD => 'HASH', META_MERGE => 'HASH', PL_FILES => 'HASH', PM => 'HASH', PMLIBDIRS => 'ARRAY', PMLIBPARENTDIRS => 'ARRAY', PREREQ_PM => 'HASH', CONFIGURE_REQUIRES => 'HASH', SKIP => 'ARRAY', TYPEMAPS => 'ARRAY', XS => 'HASH', # VERSION => ['version',''], # ignore # _KEEP_AFTER_FLUSH => '', clean => 'HASH', depend => 'HASH', dist => 'HASH', dynamic_lib=> 'HASH', linkext => 'HASH', macro => 'HASH', postamble => 'HASH', realclean => 'HASH', test => 'HASH', tool_autosplit => 'HASH', # special cases where you can use makemaker_append CCFLAGS => 'APPENDABLE', DEFINE => 'APPENDABLE', INC => 'APPENDABLE', LDDLFLAGS => 'APPENDABLE', LDFROM => 'APPENDABLE', ); sub makemaker_args { my ($self, %new_args) = @_; my $args = ( $self->{makemaker_args} ||= {} ); foreach my $key (keys %new_args) { if ($makemaker_argtype{$key}) { if ($makemaker_argtype{$key} eq 'ARRAY') { $args->{$key} = [] unless defined $args->{$key}; unless (ref $args->{$key} eq 'ARRAY') { $args->{$key} = [$args->{$key}] } push @{$args->{$key}}, ref $new_args{$key} eq 'ARRAY' ? @{$new_args{$key}} : $new_args{$key}; } elsif ($makemaker_argtype{$key} eq 'HASH') { $args->{$key} = {} unless defined $args->{$key}; foreach my $skey (keys %{ $new_args{$key} }) { $args->{$key}{$skey} = $new_args{$key}{$skey}; } } elsif ($makemaker_argtype{$key} eq 'APPENDABLE') { $self->makemaker_append($key => $new_args{$key}); } } else { if (defined $args->{$key}) { warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n}; } $args->{$key} = $new_args{$key}; } } return $args; } # For mm args that take multiple space-seperated args, # append an argument to the current list. sub makemaker_append { my $self = shift; my $name = shift; my $args = $self->makemaker_args; $args->{$name} = defined $args->{$name} ? join( ' ', $args->{$name}, @_ ) : join( ' ', @_ ); } sub build_subdirs { my $self = shift; my $subdirs = $self->makemaker_args->{DIR} ||= []; for my $subdir (@_) { push @$subdirs, $subdir; } } sub clean_files { my $self = shift; my $clean = $self->makemaker_args->{clean} ||= {}; %$clean = ( %$clean, FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_), ); } sub realclean_files { my $self = shift; my $realclean = $self->makemaker_args->{realclean} ||= {}; %$realclean = ( %$realclean, FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_), ); } sub libs { my $self = shift; my $libs = ref $_[0] ? shift : [ shift ]; $self->makemaker_args( LIBS => $libs ); } sub inc { my $self = shift; $self->makemaker_args( INC => shift ); } sub _wanted_t { } sub tests_recursive { my $self = shift; my $dir = shift || 't'; unless ( -d $dir ) { die "tests_recursive dir '$dir' does not exist"; } my %tests = map { $_ => 1 } split / /, ($self->tests || ''); require File::Find; File::Find::find( sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 }, $dir ); $self->tests( join ' ', sort keys %tests ); } sub write { my $self = shift; die "&Makefile->write() takes no arguments\n" if @_; # Check the current Perl version my $perl_version = $self->perl_version; if ( $perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; } # Make sure we have a new enough MakeMaker require ExtUtils::MakeMaker; if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) { # MakeMaker can complain about module versions that include # an underscore, even though its own version may contain one! # Hence the funny regexp to get rid of it. See RT #35800 # for details. my $v = $ExtUtils::MakeMaker::VERSION =~ /^(\d+\.\d+)/; $self->build_requires( 'ExtUtils::MakeMaker' => $v ); $self->configure_requires( 'ExtUtils::MakeMaker' => $v ); } else { # Allow legacy-compatibility with 5.005 by depending on the # most recent EU:MM that supported 5.005. $self->build_requires( 'ExtUtils::MakeMaker' => 6.42 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.42 ); } # Generate the MakeMaker params my $args = $self->makemaker_args; $args->{DISTNAME} = $self->name; $args->{NAME} = $self->module_name || $self->name; $args->{NAME} =~ s/-/::/g; $args->{VERSION} = $self->version or die <<'EOT'; ERROR: Can't determine distribution version. Please specify it explicitly via 'version' in Makefile.PL, or set a valid $VERSION in a module, and provide its file path via 'version_from' (or 'all_from' if you prefer) in Makefile.PL. EOT $DB::single = 1; if ( $self->tests ) { my @tests = split ' ', $self->tests; my %seen; $args->{test} = { TESTS => (join ' ', grep {!$seen{$_}++} @tests), }; } elsif ( $Module::Install::ExtraTests::use_extratests ) { # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness. # So, just ignore our xt tests here. } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) { $args->{test} = { TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ), }; } if ( $] >= 5.005 ) { $args->{ABSTRACT} = $self->abstract; $args->{AUTHOR} = join ', ', @{$self->author || []}; } if ( $self->makemaker(6.10) ) { $args->{NO_META} = 1; #$args->{NO_MYMETA} = 1; } if ( $self->makemaker(6.17) and $self->sign ) { $args->{SIGN} = 1; } unless ( $self->is_admin ) { delete $args->{SIGN}; } if ( $self->makemaker(6.31) and $self->license ) { $args->{LICENSE} = $self->license; } my $prereq = ($args->{PREREQ_PM} ||= {}); %$prereq = ( %$prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->requires) ); # Remove any reference to perl, PREREQ_PM doesn't support it delete $args->{PREREQ_PM}->{perl}; # Merge both kinds of requires into BUILD_REQUIRES my $build_prereq = ($args->{BUILD_REQUIRES} ||= {}); %$build_prereq = ( %$build_prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->configure_requires, $self->build_requires) ); # Remove any reference to perl, BUILD_REQUIRES doesn't support it delete $args->{BUILD_REQUIRES}->{perl}; # Delete bundled dists from prereq_pm, add it to Makefile DIR my $subdirs = ($args->{DIR} || []); if ($self->bundles) { my %processed; foreach my $bundle (@{ $self->bundles }) { my ($mod_name, $dist_dir) = @$bundle; delete $prereq->{$mod_name}; $dist_dir = File::Basename::basename($dist_dir); # dir for building this module if (not exists $processed{$dist_dir}) { if (-d $dist_dir) { # List as sub-directory to be processed by make push @$subdirs, $dist_dir; } # Else do nothing: the module is already present on the system $processed{$dist_dir} = undef; } } } unless ( $self->makemaker('6.55_03') ) { %$prereq = (%$prereq,%$build_prereq); delete $args->{BUILD_REQUIRES}; } if ( my $perl_version = $self->perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; if ( $self->makemaker(6.48) ) { $args->{MIN_PERL_VERSION} = $perl_version; } } if ($self->installdirs) { warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS}; $args->{INSTALLDIRS} = $self->installdirs; } my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_} ) } keys %$args; my $user_preop = delete $args{dist}->{PREOP}; if ( my $preop = $self->admin->preop($user_preop) ) { foreach my $key ( keys %$preop ) { $args{dist}->{$key} = $preop->{$key}; } } my $mm = ExtUtils::MakeMaker::WriteMakefile(%args); $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile'); } sub fix_up_makefile { my $self = shift; my $makefile_name = shift; my $top_class = ref($self->_top) || ''; my $top_version = $self->_top->VERSION || ''; my $preamble = $self->preamble ? "# Preamble by $top_class $top_version\n" . $self->preamble : ''; my $postamble = "# Postamble by $top_class $top_version\n" . ($self->postamble || ''); local *MAKEFILE; open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!"; eval { flock MAKEFILE, LOCK_EX }; my $makefile = do { local $/; }; $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /; $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g; $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g; $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m; $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m; # Module::Install will never be used to build the Core Perl # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m; #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m; # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well. $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g; # XXX - This is currently unused; not sure if it breaks other MM-users # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg; seek MAKEFILE, 0, SEEK_SET; truncate MAKEFILE, 0; print MAKEFILE "$preamble$makefile$postamble" or die $!; close MAKEFILE or die $!; 1; } sub preamble { my ($self, $text) = @_; $self->{preamble} = $text . $self->{preamble} if defined $text; $self->{preamble}; } sub postamble { my ($self, $text) = @_; $self->{postamble} ||= $self->admin->postamble; $self->{postamble} .= $text if defined $text; $self->{postamble} } 1; __END__ #line 541 HTTP-Lite-2.42/inc/Module/Install/Metadata.pm000644 000765 000024 00000043020 11777112371 021037 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::Metadata; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.00'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } my @boolean_keys = qw{ sign }; my @scalar_keys = qw{ name module_name abstract version distribution_type tests installdirs }; my @tuple_keys = qw{ configure_requires build_requires requires recommends bundles resources }; my @resource_keys = qw{ homepage bugtracker repository }; my @array_keys = qw{ keywords author }; *authors = \&author; sub Meta { shift } sub Meta_BooleanKeys { @boolean_keys } sub Meta_ScalarKeys { @scalar_keys } sub Meta_TupleKeys { @tuple_keys } sub Meta_ResourceKeys { @resource_keys } sub Meta_ArrayKeys { @array_keys } foreach my $key ( @boolean_keys ) { *$key = sub { my $self = shift; if ( defined wantarray and not @_ ) { return $self->{values}->{$key}; } $self->{values}->{$key} = ( @_ ? $_[0] : 1 ); return $self; }; } foreach my $key ( @scalar_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} = shift; return $self; }; } foreach my $key ( @array_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} ||= []; push @{$self->{values}->{$key}}, @_; return $self; }; } foreach my $key ( @resource_keys ) { *$key = sub { my $self = shift; unless ( @_ ) { return () unless $self->{values}->{resources}; return map { $_->[1] } grep { $_->[0] eq $key } @{ $self->{values}->{resources} }; } return $self->{values}->{resources}->{$key} unless @_; my $uri = shift or die( "Did not provide a value to $key()" ); $self->resources( $key => $uri ); return 1; }; } foreach my $key ( grep { $_ ne "resources" } @tuple_keys) { *$key = sub { my $self = shift; return $self->{values}->{$key} unless @_; my @added; while ( @_ ) { my $module = shift or last; my $version = shift || 0; push @added, [ $module, $version ]; } push @{ $self->{values}->{$key} }, @added; return map {@$_} @added; }; } # Resource handling my %lc_resource = map { $_ => 1 } qw{ homepage license bugtracker repository }; sub resources { my $self = shift; while ( @_ ) { my $name = shift or last; my $value = shift or next; if ( $name eq lc $name and ! $lc_resource{$name} ) { die("Unsupported reserved lowercase resource '$name'"); } $self->{values}->{resources} ||= []; push @{ $self->{values}->{resources} }, [ $name, $value ]; } $self->{values}->{resources}; } # Aliases for build_requires that will have alternative # meanings in some future version of META.yml. sub test_requires { shift->build_requires(@_) } sub install_requires { shift->build_requires(@_) } # Aliases for installdirs options sub install_as_core { $_[0]->installdirs('perl') } sub install_as_cpan { $_[0]->installdirs('site') } sub install_as_site { $_[0]->installdirs('site') } sub install_as_vendor { $_[0]->installdirs('vendor') } sub dynamic_config { my $self = shift; unless ( @_ ) { warn "You MUST provide an explicit true/false value to dynamic_config\n"; return $self; } $self->{values}->{dynamic_config} = $_[0] ? 1 : 0; return 1; } sub perl_version { my $self = shift; return $self->{values}->{perl_version} unless @_; my $version = shift or die( "Did not provide a value to perl_version()" ); # Normalize the version $version = $self->_perl_version($version); # We don't support the reall old versions unless ( $version >= 5.005 ) { die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n"; } $self->{values}->{perl_version} = $version; } sub all_from { my ( $self, $file ) = @_; unless ( defined($file) ) { my $name = $self->name or die( "all_from called with no args without setting name() first" ); $file = join('/', 'lib', split(/-/, $name)) . '.pm'; $file =~ s{.*/}{} unless -e $file; unless ( -e $file ) { die("all_from cannot find $file from $name"); } } unless ( -f $file ) { die("The path '$file' does not exist, or is not a file"); } $self->{values}{all_from} = $file; # Some methods pull from POD instead of code. # If there is a matching .pod, use that instead my $pod = $file; $pod =~ s/\.pm$/.pod/i; $pod = $file unless -e $pod; # Pull the different values $self->name_from($file) unless $self->name; $self->version_from($file) unless $self->version; $self->perl_version_from($file) unless $self->perl_version; $self->author_from($pod) unless @{$self->author || []}; $self->license_from($pod) unless $self->license; $self->abstract_from($pod) unless $self->abstract; return 1; } sub provides { my $self = shift; my $provides = ( $self->{values}->{provides} ||= {} ); %$provides = (%$provides, @_) if @_; return $provides; } sub auto_provides { my $self = shift; return $self unless $self->is_admin; unless (-e 'MANIFEST') { warn "Cannot deduce auto_provides without a MANIFEST, skipping\n"; return $self; } # Avoid spurious warnings as we are not checking manifest here. local $SIG{__WARN__} = sub {1}; require ExtUtils::Manifest; local *ExtUtils::Manifest::manicheck = sub { return }; require Module::Build; my $build = Module::Build->new( dist_name => $self->name, dist_version => $self->version, license => $self->license, ); $self->provides( %{ $build->find_dist_packages || {} } ); } sub feature { my $self = shift; my $name = shift; my $features = ( $self->{values}->{features} ||= [] ); my $mods; if ( @_ == 1 and ref( $_[0] ) ) { # The user used ->feature like ->features by passing in the second # argument as a reference. Accomodate for that. $mods = $_[0]; } else { $mods = \@_; } my $count = 0; push @$features, ( $name => [ map { ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_ } @$mods ] ); return @$features; } sub features { my $self = shift; while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { $self->feature( $name, @$mods ); } return $self->{values}->{features} ? @{ $self->{values}->{features} } : (); } sub no_index { my $self = shift; my $type = shift; push @{ $self->{values}->{no_index}->{$type} }, @_ if $type; return $self->{values}->{no_index}; } sub read { my $self = shift; $self->include_deps( 'YAML::Tiny', 0 ); require YAML::Tiny; my $data = YAML::Tiny::LoadFile('META.yml'); # Call methods explicitly in case user has already set some values. while ( my ( $key, $value ) = each %$data ) { next unless $self->can($key); if ( ref $value eq 'HASH' ) { while ( my ( $module, $version ) = each %$value ) { $self->can($key)->($self, $module => $version ); } } else { $self->can($key)->($self, $value); } } return $self; } sub write { my $self = shift; return $self unless $self->is_admin; $self->admin->write_meta; return $self; } sub version_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->version( ExtUtils::MM_Unix->parse_version($file) ); # for version integrity check $self->makemaker_args( VERSION_FROM => $file ); } sub abstract_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->abstract( bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix' )->parse_abstract($file) ); } # Add both distribution and module name sub name_from { my ($self, $file) = @_; if ( Module::Install::_read($file) =~ m/ ^ \s* package \s* ([\w:]+) \s* ; /ixms ) { my ($name, $module_name) = ($1, $1); $name =~ s{::}{-}g; $self->name($name); unless ( $self->module_name ) { $self->module_name($module_name); } } else { die("Cannot determine name from $file\n"); } } sub _extract_perl_version { if ( $_[0] =~ m/ ^\s* (?:use|require) \s* v? ([\d_\.]+) \s* ; /ixms ) { my $perl_version = $1; $perl_version =~ s{_}{}g; return $perl_version; } else { return; } } sub perl_version_from { my $self = shift; my $perl_version=_extract_perl_version(Module::Install::_read($_[0])); if ($perl_version) { $self->perl_version($perl_version); } else { warn "Cannot determine perl version info from $_[0]\n"; return; } } sub author_from { my $self = shift; my $content = Module::Install::_read($_[0]); if ($content =~ m/ =head \d \s+ (?:authors?)\b \s* ([^\n]*) | =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s* .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s* ([^\n]*) /ixms) { my $author = $1 || $2; # XXX: ugly but should work anyway... if (eval "require Pod::Escapes; 1") { # Pod::Escapes has a mapping table. # It's in core of perl >= 5.9.3, and should be installed # as one of the Pod::Simple's prereqs, which is a prereq # of Pod::Text 3.x (see also below). $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $Pod::Escapes::Name2character_number{$1} ? chr($Pod::Escapes::Name2character_number{$1}) : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) { # Pod::Text < 3.0 has yet another mapping table, # though the table name of 2.x and 1.x are different. # (1.x is in core of Perl < 5.6, 2.x is in core of # Perl < 5.9.3) my $mapping = ($Pod::Text::VERSION < 2) ? \%Pod::Text::HTML_Escapes : \%Pod::Text::ESCAPES; $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $mapping->{$1} ? $mapping->{$1} : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } else { $author =~ s{E}{<}g; $author =~ s{E}{>}g; } $self->author($author); } else { warn "Cannot determine author info from $_[0]\n"; } } #Stolen from M::B my %license_urls = ( perl => 'http://dev.perl.org/licenses/', apache => 'http://apache.org/licenses/LICENSE-2.0', apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1', artistic => 'http://opensource.org/licenses/artistic-license.php', artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php', lgpl => 'http://opensource.org/licenses/lgpl-license.php', lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php', lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html', bsd => 'http://opensource.org/licenses/bsd-license.php', gpl => 'http://opensource.org/licenses/gpl-license.php', gpl2 => 'http://opensource.org/licenses/gpl-2.0.php', gpl3 => 'http://opensource.org/licenses/gpl-3.0.html', mit => 'http://opensource.org/licenses/mit-license.php', mozilla => 'http://opensource.org/licenses/mozilla1.1.php', open_source => undef, unrestricted => undef, restrictive => undef, unknown => undef, ); sub license { my $self = shift; return $self->{values}->{license} unless @_; my $license = shift or die( 'Did not provide a value to license()' ); $license = __extract_license($license) || lc $license; $self->{values}->{license} = $license; # Automatically fill in license URLs if ( $license_urls{$license} ) { $self->resources( license => $license_urls{$license} ); } return 1; } sub _extract_license { my $pod = shift; my $matched; return __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?) (=head \d.*|=cut.*|)\z /xms ) || __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?) (=head \d.*|=cut.*|)\z /xms ); } sub __extract_license { my $license_text = shift or return; my @phrases = ( '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1, '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1, 'Artistic and GPL' => 'perl', 1, 'GNU general public license' => 'gpl', 1, 'GNU public license' => 'gpl', 1, 'GNU lesser general public license' => 'lgpl', 1, 'GNU lesser public license' => 'lgpl', 1, 'GNU library general public license' => 'lgpl', 1, 'GNU library public license' => 'lgpl', 1, 'GNU Free Documentation license' => 'unrestricted', 1, 'GNU Affero General Public License' => 'open_source', 1, '(?:Free)?BSD license' => 'bsd', 1, 'Artistic license' => 'artistic', 1, 'Apache (?:Software )?license' => 'apache', 1, 'GPL' => 'gpl', 1, 'LGPL' => 'lgpl', 1, 'BSD' => 'bsd', 1, 'Artistic' => 'artistic', 1, 'MIT' => 'mit', 1, 'Mozilla Public License' => 'mozilla', 1, 'Q Public License' => 'open_source', 1, 'OpenSSL License' => 'unrestricted', 1, 'SSLeay License' => 'unrestricted', 1, 'zlib License' => 'open_source', 1, 'proprietary' => 'proprietary', 0, ); while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) { $pattern =~ s#\s+#\\s+#gs; if ( $license_text =~ /\b$pattern\b/i ) { return $license; } } return ''; } sub license_from { my $self = shift; if (my $license=_extract_license(Module::Install::_read($_[0]))) { $self->license($license); } else { warn "Cannot determine license info from $_[0]\n"; return 'unknown'; } } sub _extract_bugtracker { my @links = $_[0] =~ m#L<( \Qhttp://rt.cpan.org/\E[^>]+| \Qhttp://github.com/\E[\w_]+/[\w_]+/issues| \Qhttp://code.google.com/p/\E[\w_\-]+/issues/list )>#gx; my %links; @links{@links}=(); @links=keys %links; return @links; } sub bugtracker_from { my $self = shift; my $content = Module::Install::_read($_[0]); my @links = _extract_bugtracker($content); unless ( @links ) { warn "Cannot determine bugtracker info from $_[0]\n"; return 0; } if ( @links > 1 ) { warn "Found more than one bugtracker link in $_[0]\n"; return 0; } # Set the bugtracker bugtracker( $links[0] ); return 1; } sub requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->requires( $module => $version ); } } sub test_requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->test_requires( $module => $version ); } } # Convert triple-part versions (eg, 5.6.1 or 5.8.9) to # numbers (eg, 5.006001 or 5.008009). # Also, convert double-part versions (eg, 5.8) sub _perl_version { my $v = $_[-1]; $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e; $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e; $v =~ s/(\.\d\d\d)000$/$1/; $v =~ s/_.+$//; if ( ref($v) ) { # Numify $v = $v + 0; } return $v; } sub add_metadata { my $self = shift; my %hash = @_; for my $key (keys %hash) { warn "add_metadata: $key is not prefixed with 'x_'.\n" . "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/; $self->{values}->{$key} = $hash{$key}; } } ###################################################################### # MYMETA Support sub WriteMyMeta { die "WriteMyMeta has been deprecated"; } sub write_mymeta_yaml { my $self = shift; # We need YAML::Tiny to write the MYMETA.yml file unless ( eval { require YAML::Tiny; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.yml\n"; YAML::Tiny::DumpFile('MYMETA.yml', $meta); } sub write_mymeta_json { my $self = shift; # We need JSON to write the MYMETA.json file unless ( eval { require JSON; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.json\n"; Module::Install::_write( 'MYMETA.json', JSON->new->pretty(1)->canonical->encode($meta), ); } sub _write_mymeta_data { my $self = shift; # If there's no existing META.yml there is nothing we can do return undef unless -f 'META.yml'; # We need Parse::CPAN::Meta to load the file unless ( eval { require Parse::CPAN::Meta; 1; } ) { return undef; } # Merge the perl version into the dependencies my $val = $self->Meta->{values}; my $perl = delete $val->{perl_version}; if ( $perl ) { $val->{requires} ||= []; my $requires = $val->{requires}; # Canonize to three-dot version after Perl 5.6 if ( $perl >= 5.006 ) { $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e } unshift @$requires, [ perl => $perl ]; } # Load the advisory META.yml file my @yaml = Parse::CPAN::Meta::LoadFile('META.yml'); my $meta = $yaml[0]; # Overwrite the non-configure dependency hashs delete $meta->{requires}; delete $meta->{build_requires}; delete $meta->{recommends}; if ( exists $val->{requires} ) { $meta->{requires} = { map { @$_ } @{ $val->{requires} } }; } if ( exists $val->{build_requires} ) { $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } }; } return $meta; } 1; HTTP-Lite-2.42/inc/Module/Install/Win32.pm000644 000765 000024 00000003403 11777112371 020222 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::Win32; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.00'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # determine if the user needs nmake, and download it if needed sub check_nmake { my $self = shift; $self->load('can_run'); $self->load('get_file'); require Config; return unless ( $^O eq 'MSWin32' and $Config::Config{make} and $Config::Config{make} =~ /^nmake\b/i and ! $self->can_run('nmake') ); print "The required 'nmake' executable not found, fetching it...\n"; require File::Basename; my $rv = $self->get_file( url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe', ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe', local_dir => File::Basename::dirname($^X), size => 51928, run => 'Nmake15.exe /o > nul', check_for => 'Nmake.exe', remove => 1, ); die <<'END_MESSAGE' unless $rv; ------------------------------------------------------------------------------- Since you are using Microsoft Windows, you will need the 'nmake' utility before installation. It's available at: http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe or ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe Please download the file manually, save it to a directory in %PATH% (e.g. C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to that directory, and run "Nmake15.exe" from there; that will create the 'nmake.exe' file needed by this module. You may then resume the installation process described in README. ------------------------------------------------------------------------------- END_MESSAGE } 1; HTTP-Lite-2.42/inc/Module/Install/WriteAll.pm000644 000765 000024 00000002376 11777112371 021053 0ustar00neilbstaff000000 000000 #line 1 package Module::Install::WriteAll; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.00'; @ISA = qw{Module::Install::Base}; $ISCORE = 1; } sub WriteAll { my $self = shift; my %args = ( meta => 1, sign => 0, inline => 0, check_nmake => 1, @_, ); $self->sign(1) if $args{sign}; $self->admin->WriteAll(%args) if $self->is_admin; $self->check_nmake if $args{check_nmake}; unless ( $self->makemaker_args->{PL_FILES} ) { # XXX: This still may be a bit over-defensive... unless ($self->makemaker(6.25)) { $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL'; } } # Until ExtUtils::MakeMaker support MYMETA.yml, make sure # we clean it up properly ourself. $self->realclean_files('MYMETA.yml'); if ( $args{inline} ) { $self->Inline->write; } else { $self->Makefile->write; } # The Makefile write process adds a couple of dependencies, # so write the META.yml files after the Makefile. if ( $args{meta} ) { $self->Meta->write; } # Experimental support for MYMETA if ( $ENV{X_MYMETA} ) { if ( $ENV{X_MYMETA} eq 'JSON' ) { $self->Meta->write_mymeta_json; } else { $self->Meta->write_mymeta_yaml; } } return 1; } 1;