pax_global_header00006660000000000000000000000064125266341060014517gustar00rootroot0000000000000052 comment=39224cd1d737ada90ec2296087d6a84ebad335e3 whohas-0.29.1/000077500000000000000000000000001252663410600131015ustar00rootroot00000000000000whohas-0.29.1/INSTALL000066400000000000000000000003661252663410600141370ustar00rootroot00000000000000whohas Dependencies ============ perl date Perl Modules ------------ LWP::UserAgent (usually packaged as libwww-perl or perl-libwww, depending on distribution) forks Thread::Queue Sys::CPU (optional) To install ========== sudo make install whohas-0.29.1/LICENSE000066400000000000000000000431161252663410600141130ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, 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 How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. whohas-0.29.1/Makefile000066400000000000000000000033301252663410600145400ustar00rootroot00000000000000PREFIX ?= /usr/local bindir ?= $(PREFIX)/bin mandir ?= $(PREFIX)/share/man docdir ?= $(PREFIX)/share/doc/whohas exadir ?= $(docdir)/examples INSTALL ?= install VERSION ?= 0.29.1 all: check check: perl -wc whohas test "$$(sed -n 's/^.*distros[a-zA-Z]\+ = qw(\([^)]*\).*/\1/p' whohas)" = "$$(sed -n 's/^.*distro[a-zA-Z]\+ = qw(\([^)]*\).*/\1/p' whohas.cf)" install: $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) -m755 whohas $(DESTDIR)$(bindir) $(INSTALL) -d $(DESTDIR)$(mandir)/man1 $(INSTALL) -d $(DESTDIR)$(mandir)/de/man1 $(INSTALL) -m644 usr/share/man/man1/whohas.1 $(DESTDIR)$(mandir)/man1 $(INSTALL) -m644 usr/share/man/de/man1/whohas.1 $(DESTDIR)$(mandir)/de/man1 $(INSTALL) -d $(DESTDIR)$(docdir) $(INSTALL) -m644 intro.html $(DESTDIR)$(docdir) $(INSTALL) -d $(DESTDIR)$(docdir)/html_assets $(INSTALL) -m755 html_assets/* $(DESTDIR)$(docdir)/html_assets $(INSTALL) -m644 README $(DESTDIR)$(docdir) $(INSTALL) -m644 NEWS $(DESTDIR)$(docdir) $(INSTALL) -m644 TODO $(DESTDIR)$(docdir) $(INSTALL) -d $(DESTDIR)$(exadir) $(INSTALL) -m644 whohas.cf $(DESTDIR)$(exadir) release: gitk --all & echo '!!! Please summarize the release here one item per paragraph !!!' > NEWS.notes $$EDITOR NEWS.notes echo $(VERSION) > NEWS.new echo >> NEWS.new cat NEWS.notes >> NEWS.new echo >> NEWS.new cat NEWS >> NEWS.new mv NEWS.new NEWS sed -i '/^\.TH/s/"[0-9]\.[0-9.]\+"/"$(VERSION)"/' usr/share/man/man1/whohas.1 usr/share/man/de/man1/whohas.1 git commit -m 'Release version $(VERSION)' NEWS usr git tag -s -a -F NEWS.notes $(VERSION) rm -f NEWS.notes GZIP= git archive --prefix=whohas-$(VERSION)/ -o whohas-$(VERSION).tar.gz $(VERSION) gpg --armour --detach-sign whohas-$(VERSION).tar.gz .PHONY: all install check release whohas-0.29.1/NEWS000066400000000000000000000073641252663410600136120ustar00rootroot000000000000000.29.1 Uses less memory and improves threading (requires forks Perl module). Update the documentation. Fetch multiple suites at once for Debian/Ubuntu. Improved options parsing. Add a config file to set desired distros/releases. Fixed support for Gentoo, Slackware, OpenBSD, FreeBSD, Arch, AUR, Fedora, Fink, openSUSE, Mandriva and Cygwin. 0.29 fixed AUR module fixed Mandriva module fixed a problem with openBSD URL construction added new Slackware module to replace the previous one which queried a now-defunct (third party) web interface code cleanup implemented functionality suggested by Guillaume Delacour and Steve Cotton updated to current version numbers of Ubuntu, Mandriva, openSUSE, OpenBSD, Fedora, Slackware (13.1 not 13.37 as we're waiting on linuxpackages.net to update their search interface) NB: Fedora and openSUSE seem currently not to be working; Mandriva shows only first ten results returned by sophie.zarb.org 0.24 Cygwin module added other modules updated repository column widened to accommodate huge openSUSE repo strings other minor changes and fixes 0.23 columns have been made wider to accommodate Debian's often excessively long version strings netbsd, debian and ubuntu now report sizes netbsd now reports dates "--shallow" suppresses these fetches, which can be desirable as they are time-consuming and exert server load all of these calls are threaded by default, can be disabled by "--no-threads" (same procedure as every year, James) fixed fedora size formatting bug now warns if distros specified are not recognised (thanks S Cotton for the bug report) now honours proxies (thanks Thibaut Varene for the bug report, Jonathan Wiltshire for pointing out the fix) Mandriva module added (thanks Sylvestre Ledru for pointing out the server) 0.22 netbsd module now queries pkgsrc.se, shows more details, is faster Miscellaneous bugfixes Also using the old combos subroutine again for some repositories, is slower Added manpages in English and German, updated install script to install manpages to /usr/share/man 0.21 Added back Gentoo Added back Fedora Changed combos subroutine after profiling showed it to be slow Including Debian "testing" repositories since we've been including Sourcemage's "test" for a while Officially no more dependency on wget (for now, at least) 0.20 Distributions can now be specified on commandline, using the "-d Distribution1,Distribution2" option; the recognised strings are archlinux, debian, fink, freebsd, macports, netbsd, openbsd, opensuse, slackware, sourcemage, ubuntu Some unrelated string changes 0.19 Added switch for unthreaded runs. Changed string "DarwinPorts" to "MacPorts" 0.18 Added openSUSE module 0.17 Fixed several modules; all now working except Gentoo (RIP, web interface was removed by Gentoo Project) and Fedora 0.16 Bumped or fixed several that weren't working. Disabled Gentoo because package search seems to have been removed from web. 0.15 added support for - Ubuntu Bumped OpenBSD default release to 3.8 Fixed fink parsing. 0.14 added support for - Fink - DarwinPorts - linuxpackages.net Fix Debian version number bug. Changed size of first column to fit strings "Source Mage" and "DarwinPorts". 0.13 fixed Gentoo problem fixed Slackware problem made Fedora sizes human-readable give only most current Gentoo version 0.12 changed string "Src Mage" to "SMGL" added support for - Fedora added a rudimentary install script 0.11 version 0.1 re-released as 0.10; version numbering will now have two decimal places added support for - Source Mage - FreeBSD - NetBSD - OpenBSD information about OpenBSD and NetBSD packages stored locally; updated once a day date format sort-compatible modules addressed as threads for speed module templates included whohas-0.29.1/README000066400000000000000000000267561252663410600140010ustar00rootroot00000000000000Notes for whohas More information can be found at http://www.philippwesche.org/200811/whohas/intro.html Philipp L. Wesche whohas is a command line tool that allows querying several package lists at once - currently supported are Arch, Debian, Gentoo and Slackware. whohas is written in Perl and was designed to help package maintainers find ebuilds, pkgbuilds and similar package definitions from other distributions to learn from. However, it can also be used by normal users who want to know: - Which distribution has packages available for apps upon whom the user depends. - What version of a given package is in use in each distribution, or in each release of a distribution (implemented only for Debian). whohas gives urls to more details about the package. I recommend using a terminal that recognises hyperlinks and allows easy forwarding to the browser. You can use grep to improve your search results: whohas gimp | grep "gimp " The space will ensure that only results for the package gimp are displayed, not for gimp-print etc. whohas gimp | grep Arch whohas gimp | grep -i arch Either one of the above will display results for Arch Linux only. If you are interested in the search term or package arch, and want results for Arch Linux only, whohas arch | grep "^Arch" Example output: [phil@epistasis whohas_release]$ whohas gaim Arch gaim 1.4.0-1 10-07-2005 Current http://www.archlinux.org/packages.php?id=4226 Arch gaim-encryption 2.38-1 14-06-2005 Extra http://www.archlinux.org/packages.php?id=5518 Arch festival-gaim 1.1-1 community http://aur.archlinux.org/packages.php?do_Details=1&ID=1017 Arch gaim-latex 0.3-1 unsupported http://aur.archlinux.org/packages.php?do_Details=1&ID=1058 Arch gaim-otr 2.0.2-1 unsupported http://aur.archlinux.org/packages.php?do_Details=1&ID=1242 Arch gaim-xmms 0.33-1 unsupported http://aur.archlinux.org/packages.php?do_Details=1&ID=121 Arch guifications 2.9-1 unsupported http://aur.archlinux.org/packages.php?do_Details=1&ID=640 Debian gaim 1 oldstable http://packages.debian.org/oldstable/net/gaim Debian gaim 1 stable http://packages.debian.org/stable/net/gaim Debian gaim 1 testing http://packages.debian.org/testing/net/gaim Debian gaim 1 unstable http://packages.debian.org/unstable/net/gaim Debian gaim-autoprofile 2.10-1 testing http://packages.debian.org/testing/net/gaim-autoprofileDebian gaim-autoprofile 2.10-2 unstable http://packages.debian.org/unstable/net/gaim-autoprofile Debian gaim-common 1 oldstable http://packages.debian.org/oldstable/net/gaim-common Debian gaim-data 1 stable http://packages.debian.org/stable/net/gaim-data Debian gaim-data 1 testing http://packages.debian.org/testing/net/gaim-data Debian gaim-data 1 unstable http://packages.debian.org/unstable/net/gaim-data Debian gaim-dev 1 stable http://packages.debian.org/stable/devel/gaim-dev Debian gaim-dev 1 testing http://packages.debian.org/testing/devel/gaim-dev Debian gaim-dev 1 unstable http://packages.debian.org/unstable/devel/gaim-dev Debian gaim-encryption 2.36-3 stable http://packages.debian.org/stable/net/gaim-encryption Debian gaim-encryption 2.37-1 testing http://packages.debian.org/testing/net/gaim-encryption Debian gaim-encryption 2.38-1 unstable http://packages.debian.org/unstable/net/gaim-encryptionDebian gaim-extendedprefs 0.4-4 stable http://packages.debian.org/stable/net/gaim-extendedprefs Debian gaim-extendedprefs 0.4-4 testing http://packages.debian.org/testing/net/gaim-extendedprefs Debian gaim-extendedprefs 0.4-6 unstable http://packages.debian.org/unstable/net/gaim-extendedprefs Debian gaim-gnome 1 oldstable http://packages.debian.org/oldstable/net/gaim-gnome Debian gaim-guifications 2.10-1 stable http://packages.debian.org/stable/net/gaim-guificationsDebian gaim-guifications 2.10-1 testing http://packages.debian.org/testing/net/gaim-guifications Debian gaim-guifications 2.10-1 unstable http://packages.debian.org/unstable/net/gaim-guifications Debian gaim-meanwhile 1.2.3-1 testing http://packages.debian.org/testing/net/gaim-meanwhile Debian gaim-meanwhile 1.2.3-1 unstable http://packages.debian.org/unstable/net/gaim-meanwhile Debian gaim-otr 2.0.1-1 stable http://packages.debian.org/stable/net/gaim-otr Debian gaim-otr 2.0.2-1 testing http://packages.debian.org/testing/net/gaim-otr Debian gaim-otr 2.0.2-1 unstable http://packages.debian.org/unstable/net/gaim-otr Debian gaim-themes 0.1-1 stable http://packages.debian.org/stable/net/gaim-themes Debian gaim-themes 0.1-1 testing http://packages.debian.org/testing/net/gaim-themes Debian gaim-themes 0.1-1 unstable http://packages.debian.org/unstable/net/gaim-themes Gentoo gaim-blogger 1.0.0 22-03-2005 http://packages.gentoo.org/ebuilds/?gaim-blogger-1.0.0 Gentoo gaim-bnet 0.1.1 04-03-2005 http://packages.gentoo.org/ebuilds/?gaim-bnet-0.1.1 Gentoo gaim-bnet 0.1.0 17-02-2005 http://packages.gentoo.org/ebuilds/?gaim-bnet-0.1.0 Gentoo gaim-meanwhile 1.2.3 14-06-2005 http://packages.gentoo.org/ebuilds/?gaim-meanwhile-1.2.3 Gentoo gaim-meanwhile 1.2.2 04-05-2005 http://packages.gentoo.org/ebuilds/?gaim-meanwhile-1.2.2 Gentoo gaim-meanwhile 1.2.0 10-04-2005 http://packages.gentoo.org/ebuilds/?gaim-meanwhile-1.2.0 Gentoo gaim-meanwhile 1.0.2 08-02-2005 http://packages.gentoo.org/ebuilds/?gaim-meanwhile-1.0.2 Gentoo gaim-snpp 0.8.0 21-02-2005 http://packages.gentoo.org/ebuilds/?gaim-snpp-0.8.0 Gentoo gaim-assistant 0.09 06-01-2005 http://packages.gentoo.org/ebuilds/?gaim-assistant-0.09Gentoo gaim-assistant 0.07 06-01-2005 http://packages.gentoo.org/ebuilds/?gaim-assistant-0.07Gentoo gaim-encryption 2.38 12-07-2005 http://packages.gentoo.org/ebuilds/?gaim-encryption-2.38 Gentoo gaim-encryption 2.37 13-05-2005 http://packages.gentoo.org/ebuilds/?gaim-encryption-2.37 Gentoo gaim-encryption 2.36 07-07-2005 http://packages.gentoo.org/ebuilds/?gaim-encryption-2.36 Gentoo gaim-encryption 2.35 27-02-2005 http://packages.gentoo.org/ebuilds/?gaim-encryption-2.35 Gentoo gaim-encryption 2.34 24-01-2005 http://packages.gentoo.org/ebuilds/?gaim-encryption-2.34 Gentoo gaim-encryption 2.32-r1 07-02-2005 http://packages.gentoo.org/ebuilds/?gaim-encryption-2.32-r1 Gentoo gaim-extprefs 0.4-r1 04-06-2005 http://packages.gentoo.org/ebuilds/?gaim-extprefs-0.4-r1 Gentoo gaim-extprefs 0.4 30-03-2005 http://packages.gentoo.org/ebuilds/?gaim-extprefs-0.4 Gentoo gaim-latex 0.3 17-06-2005 http://packages.gentoo.org/ebuilds/?gaim-latex-0.3 Gentoo gaim-otr 2.0.2 17-05-2005 http://packages.gentoo.org/ebuilds/?gaim-otr-2.0.2 Gentoo gaim-otr 2.0.1 30-03-2005 http://packages.gentoo.org/ebuilds/?gaim-otr-2.0.1 Gentoo gaim-otr 2.0.0 10-02-2005 http://packages.gentoo.org/ebuilds/?gaim-otr-2.0.0 Gentoo gaim-otr 1.0.3 09-02-2005 http://packages.gentoo.org/ebuilds/?gaim-otr-1.0.3 Gentoo gaim-rhythmbox 1.0.0.1 21-10-2004 http://packages.gentoo.org/ebuilds/?gaim-rhythmbox-1.0.0.1 Gentoo gaim-xmms-remote 1.8 29-10-2004 http://packages.gentoo.org/ebuilds/?gaim-xmms-remote-1.8 Gentoo gaim-xmms-remote 1.7 21-10-2004 http://packages.gentoo.org/ebuilds/?gaim-xmms-remote-1.7 Gentoo gaimosd 1.0.0 18-02-2005 http://packages.gentoo.org/ebuilds/?gaimosd-1.0.0 Gentoo gaim-smileys 20031002 24-06-2004 http://packages.gentoo.org/ebuilds/?gaim-smileys-20031002 Gentoo autoprofile 2.10 21-10-2004 http://packages.gentoo.org/ebuilds/?autoprofile-2.10 Gentoo bangexec 1.3.0.2 21-06-2005 http://packages.gentoo.org/ebuilds/?bangexec-1.3.0.2 Gentoo bangexec 1.3.0 21-04-2005 http://packages.gentoo.org/ebuilds/?bangexec-1.3.0 Gentoo bangexec 1.1.4 03-04-2005 http://packages.gentoo.org/ebuilds/?bangexec-1.1.4 Gentoo guifications 2.10 10-04-2005 http://packages.gentoo.org/ebuilds/?guifications-2.10 Gentoo guifications 2.9 11-02-2005 http://packages.gentoo.org/ebuilds/?guifications-2.9 Gentoo guifications 2.8 07-02-2005 http://packages.gentoo.org/ebuilds/?guifications-2.8 Gentoo ignorance 1.3.1.2 13-07-2005 http://packages.gentoo.org/ebuilds/?ignorance-1.3.1.2 Gentoo ignorance 1.3.0 21-04-2005 http://packages.gentoo.org/ebuilds/?ignorance-1.3.0 Slackware gaim 1.4.0-i486 slackware The first column is the name of the distribution, the second the name of the package, the third the version number, then the date, repository name and a url linking to more information about the package. Future versions will have package size information, too. Column lengths are fixed, so you can use cut: whohas vim | grep " vim " | cut -b 36-45 The first bytes of the data fields at the time of writing are 11, 37, 48, 59 and 71. I would like to encourage distributors at this time to provide web query interfaces to package lists, and specifically provide the following information: package name, version, date, size and a url to further information (maintainer, build information etc.) Additional remarks: Debian refers to the binary distribution. Slackware queries Current only. All details (including availability, version numbers and binary sizes) are for the x86 architecture, although this cannot be assured for either Debian or Gentoo in the current version of whohas. I recommend you consult the URLs provided in the output. Bug reports may be sent to phi1ipp@yahoo.com. whohas-0.29.1/TODO000066400000000000000000000016301252663410600135710ustar00rootroot00000000000000use getopts for all parameters fix repo string length for some osuse repos (e.g. in whohas whohas result) make extra columns for debian and ubuntu, to avoid inconveniencing everybody else Add more sites: http://chocolatey.org/ http://brew.sh/ http://www.sabayon.org/ http://www.angstrom-distribution.org/ http://www.openembedded.org/ http://openmoko.org/ http://openwrt.org http://www.emdebian.org/ http://elinux.org/Embedded_Linux_Distributions https://wayback.archive.org/web/http://www.linuxdevices.com/articles/AT2760742655.html http://freecode.com/ http://directory.fsf.org/ http://en.wikipedia.org/wiki/Comparison_of_free_software_hosting_facilities http://www.sisyphus.ru/ http://savannah.gnu.org http://gna.org http://sourceforge.net http://www.berlios.de http://github.com http://gitorious.org http://www.openhub.net http://code.google.com http://www.launchpad.net http://bitbucket.org http://transifex.com whohas-0.29.1/html_assets/000077500000000000000000000000001252663410600154275ustar00rootroot00000000000000whohas-0.29.1/html_assets/bgc.gif000066400000000000000000000000521252663410600166460ustar00rootroot00000000000000GIF87aq,q d;whohas-0.29.1/html_assets/blackleaf.css000066400000000000000000000052741252663410600200550ustar00rootroot00000000000000 body {background-color:#FFFFFF; background-image:url(bgc.gif); background-repeat:repeat-x; font-family:Helvetica,sans-serif;color:#000000; margin:0px; padding:0px; letter-spacing:0em; } div {width:100%;left:0;} h1 {color:#ffffff; font-weight:bold; } h1,h2,h3,p {padding-left:9px;padding-right:6px;margin-right:5px;} h2 {font-size:16pt;margin-top:11px;} h3 {font-size:13pt; margin-top:0px;} h3.underg {margin-top:40px;} p,td,li { color:#000000; } p {margin-top:0px;margin-bottom:12px; } a {text-decoration:none;} a:link {color:#3C57DD;} a:visited {color:#713CDD;} p.reference { margin-left:25px;text-indent:-16px; } p.smallp { font-size:10pt; } p.quot { font-family:"Times New Roman"; font-style:italic; margin:10px 30px 5px 30px; font-size:13pt; color:#94a47f; } p.auth { font-family:"Times New Roman"; margin-left:30px; } p,td,li { line-height:115%; } h2,h3,li,p { margin-left:9px; } h1.head {font-size:20pt;margin-top:20px;margin-bottom:10px; margin-left:5px;} p.mu {font-weight:bold; font-size:13pt;margin-bottom:13px;margin-top:25px; color: #ffffff;} table.main {border-spacing:10px; margin-top:40px; } /* #hd {position:absolute; top:0;background-color:#879674;} /*old version*/ #hd {position:absolute; top:0;} #hd h1 {font-size:20pt;margin-top:20px;margin-bottom:10px; margin-left:15px;} /* #hd a:link {color:#FFFFFF;} #hd a:visited {color:#cfcfcf;} */ #main {position:absolute;top:99px; padding-top:22px; padding-left:9px;} /* div */ #mainp {padding-left:9px;} /* div */ div.mainp { margin-top:121px; } #newspaper {position:absolute;top:160px;} #bar {} /* div */ #mu {font-weight:bold; font-size:13pt;margin-bottom:13px;margin-top:25px; margin-left:20px; color: #3d3d3d;} /* p (top menu bar) */ a.ex { color: #88be3a; } p.bar {margin-top:12px} /* p */ h3.date {font-weight:bold;font-size:12pt;margin-bottom:3px;} p.ad {margin-bottom:0px;margin-top:0px;margin-left:10px;font-family:serif;font-size:13pt;} .afterbar {margin-top:30pt;} p.ab {font-style:italic;font-size:13pt;margin-bottom:10px;} p.flin,p.ind {margin-bottom:0px;} /* suppress vertical gap */ p.ind {text-indent:12px;} p.indd {text-indent:12px;} p.code {font-family:monospace;text-indent:20px;} p.i {font-style:italic; } #profil {border-spacing:10px;position:absolute; top:4px; margin:8px; } /* table */ div.portrait { position:absolute; left:430px; top:35px; } #nav-footer { width:392px; margin-left:45px; margin-top:120px; padding-left:0px; padding-right:0px; } #nav-footer-line { width:400px; } #profile-footer-line { width:280px; margin-top:40px;} #nav-footer-p { text-align:center; margin-top:18px; margin-bottom:50px; margin-left:0px; padding-left:0px; margin-right:0px; padding-right:0px; } font.unicorn { color:#3d3d3d; } whohas-0.29.1/html_assets/iespecific.css000066400000000000000000000000721252663410600202430ustar00rootroot00000000000000 td { padding-top: 10px; } #profil { margin-left:20px; } whohas-0.29.1/html_assets/screenshot.jpg000066400000000000000000005340221252663410600203140ustar00rootroot00000000000000JFIFHHC  !"$"$C" \ !"1#2AQVa5B$37su4Rq%C&6SUbcrtvWd'8Df4!Q1RaA"q#23B ?R-bmmmyqv]É'ܪفOJe >G#Sh\d Ui;Se+8=^D(}h>ܫGgϊșhN2ec'Xy N?O:;DQjU;)s'?15QDLSlfRBxLq~`@ (9uC枔y9("$$>ƴ44z.֌h̊meqل|<|~uG'Nki.i3<3#={5\&ixOLLY<bHܱyp~rUʛgq-!+2^^G!?qKŹr*s;pŃ8zg ej$zRX9 `Sx?U;5lEs]bwf"f3s17|f7DSDq}5Ì*.NYV5N (puv<+KMV뤍qԀ'V]n mcVfFf`5G>B _ԉM"ێ8MS`ۗxԼAx#SE݈b?eݖϳUS1VxN""c<}Ԫ68 n~{cw6.8њ1YcfUU0ȡ?̧55a*wX Y{GS}{dQ<m=jդV$AA^陜e~n` 0\قk,l9Vߨ󐡕~ iKF'hI-Jpy1(O d\$-crv.CrXp@ G5Y;O7.K7jI+kެl^,$U\Sr)[CbzC͋cy(z$$*,' 'YǬ T|T[rw5K*u@{ ~x$LnKbBŋT`{ ~vk8&3\|!U#ԫ8+㏛kv}3|׳\1*&̽rVG6j~ C!A,ɌZv1"#i`%Yei~ZB>DrV<|ve O]S*Փ$DΌsۖp9kxz*cDt)ult8yUq=1hi\3Lg3:yeWb"?wg>[7:-n\ %cVWRP1Ʃ9 rS/.&h`,o ^nO'j }~Ke#XvDřO͗qٛbv NĆZj 95~?>uݫGfӣoDg7ߣg)wn> +})D>ՙYOHQx9$}ulg2g+AmR~* :Vx#'9<ª|ji6ɷW%0nI*'IdVfRYzon>Sxݯ i{1dfy?pfcv+椆,#PWjE3+RAn̛лe]F̌fXjEI~~8G?ruGbg a&[aQq+|o5sTS-3߯*Um˸4Vx+n70x#A F-C6z3[e0Ĥ8 (=wO$q-8\@׎5\ 9ԯ-Zg3^G؛5(Si"47G#:)T ArXCYM;sU{h{uKuj%%E"(:z0 8> x:XXWLSuP>x׮'.5i}2%oRǚ/`:rJ?@^SȀf<k6JԖ[gY4UqepV)AhFyiF u2'qƣM/ !ijUlV) k1f?4g5`5}6y]X5%Uk^UIy:Wr",5kx\N#krǦ^O:1^5ThW埡o#ΛɓvÙu5#Eh^VFz)?c%C 9$v,FYe'~#HCԧ%k{̻kN IiZus-Y"Ry#gP|$}XW7װ ,D!=}ֹ˹Hc 됍Gޙ-ޔҌ 8 {7]]7nDTAq-$8+ eoYo*Jlv3|#s?dv%_>[*+Ngwڽ;c48硵^ J/vi"scV< O_۔W?-j>B<WED 19|~?dv%_>~=^ɲQ(f>-ݫ^3Tc2aJmKjg^Fd^~AG#LA=9#Ț(xQu?x?=?;_6vM)ަsOǟw'k3OObdžZ2bQu;IeSI#v!P=9k#Z땦*NҺчW^+! ?^ Wz~?dv%_d6>yvǖ3,y'}vl / NI+߰,oA+RsDDn֚>{8zf+2'h^ 9z8 3_!vkDTK-v ~yOcGkU Wz[82 ˥+-L縛! ㈚~sG&^J`[&V Wz~?dv%_?gĢNj.Oޮ|#Zi"5^rV/5'3<|չFNWx?Mݜ~]Qw(s1Da?ōFƪO48XO='ԓV;cnV6Z݅^ߜy09 I\_ Wz~?dv%_׼;¯U7,z9/U]X(m;-5hm0C(qkk߀l%LMJOo,?dv%_>{iٯӹvǼBj6UMXf[#9+ 1yiYsFn2 1׌F yߨ=?;_omf6mӊi1&UQ5Ou?;_l~JP5U=?;_&picGkU Wz}Rhk k}#*O=5rk 8װ~?dv%_>Q[}(׸K}#*O=5K'b5Ql~J}#*YY-5Ol~J}#*[[ |q Wz~?dv%_鮣E_8uAIr {,5d2qΪ Wz~?dv%_5{~z- !c1f^H 咕7K0J}4`P@_j>cGkU[Gޤl}hcH˨=;x$sΒ֯<4Hcg@J<~A#BF߃ Wzv%;Aؘ)_oב<,G>~3$3z,'M`Z !-*Vq2d<- KN3+;?R{(?ul8|Xzq3tcm9h~G?dv%_gl8LK꫌L.yl&1[C!$9;<p`Qҿx}x|qӯۯ}}#*O=sWZ:_*߈~!χ<'=9hjp+G%dexժ'cGkUYMIZ;7jjr%"Nz?ocjI٪&cE+p{ g+_P"fJy$X$?yxP#{H,pxpT{>cGkUYGޭWGx##e<~FւZ$ qUEo>cGkU=4}* jV p8*P|p5Ƴ/=?;_}UFY>cGkUUGަoNY_cGkU Wz6=u;5~z5?x[>cGkUQ-|Fƀ~8]>cGkU=4} :k/l~J}#*MUM%|F~#>F=?;_[\z4˿;_l~JUoVi+z45#'e Wz~?dv%_髣V+z4׍e Wz~?dv%_髣Vi+z4He>cGkUWoSI_8ѦiƳ?=?;_?zIs}4g>cGkU|SI_8Ѧ?@YcGkU Wzji+z5\=?;_QFDru~?dv%_>5{M_ލGp5ԕQ>cGkU6~zjiNi>cGkU[ΒqDs˪Ѝ$33cGkUOc1z/Ds7T)O*Ns XI n#v 7xD:+pݏ.qc۴ cGkUqcE[T}贷]Z҅DidIb~5>cGkUK|Ezkb8;JzC zSSWKνhvP$4?s꓏h\^[r?<oj/oXUDe Z1.tӌ>o;$c-ijEk K:h5-O*pG>RuL*нʧ!2x{?ԧ~+}|^O59㷇Q]1Mtf:wmc1Vg}%Mcg 9Q*yG#\۪ϽUts{=!?˗^]UL-4SDS=Ҟ~˿/ \-sޮTwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt{ߨgd7r{Cx. M-_TwJ{ߧ{Cx. Ogd7rjGt`YYe>C/ \-=˿6[ ?pc_mİUWd~-Kp?v?ڴr{g# $PK55l|Us bg2*>*DZrqyZFe2gm(pYHf3EZH~K.ۺ?VfhAM1LS^019=M|~!`11GPO;85J^Lfn;Sǔ踖8ƁUzBVC|#\Fݞ<wz^e*'EBZ~GÇkc|=oU$ T8#J95[c OB0kcDFи,G؞5Gb|mI?~?%D DWwo?%19N?-^#tպXͳ%v#C f4W Y0sjXo&7T )y%ػ8w_k,Nj)h^YB w۟k院itU⪫_Ou.]q~oj=-_ utzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzS~=__wZ{=!?˗/WG;=~E=!?˗_wZinr5tzskh'tj'J;ݳR^|sס,*x FpYqy1pܻkqtc*sソKƜO 9$NتDx^"nwG `2z([T (,O[z V [#DQif'>I:wy_5zJӭFщZ ]VN{1łc\]ͺ.13Kdn:[sanՒ^ HpHWMS<Cu?Wj?g+mw=_VǓoܢYj( eޫ{deۑެe e`! :~G1N'g/$i+^|2<Ӂu @d񹌥/dmǒ{H,<\` PlUZqx{V :#wbݗM5zSۗ3̝۞oOߙh'%qcEjEb="\},'G2(nmov)y[+l,#ŵ^cU>>HgܳP&HW7i'AJ Of=y]Y8}H{rue$z@M@ye<|3|L~370JwFk=]y3!$KÚ\˶6}[.b4h N\J71s76 HبJ0{[RC^;+pʼx atO ZjxkZȠn$HD8Q籫d;dP1Mfi%?Hߟ8oк3{аןNcjQڴK;~JN]Y5M˻0[!7rK8eNE0qQ4=%1 y=ܙv2cb%@ITC89Xfj s\a^k$Y {F CʩqkMf[Ͼѽ&"UXZdbTY)f <3qxث9Rf5hM4V$rʽe +vkTeb*i\(.YTH(#ߟqq0|| ]`lRR(8=crmK &౓jhQ̋W"#EB"n^ù]76h|PƚpMf5 wU O[/3U7={u/mqdžujbDHrPOSdejyKVfW!x }sΌ99zvG+.F9u)*Q!z/NiO7/d-TexeT(㑦zSfBk#70,4wJPxn>\tqf{sL%71Y)e *qcDOۯzf,%V:ef!:԰*Y=,6o=+^^{[AoXnpzȢ ?ifWv2)>0#0wgdfv1rzfN2Gi4MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM44MM45^mX܇s'4%nҳ3|u%Ź<#8G3Py&&غ0jLuT`p/w~ñ|z`XL Wظdn: ~OGkR{_^.fNٹED,~U>F#N;^J%"X^u U-* 1;ׯ7֏y(Y%˿^ P纯D bQQ7n[fF nbd19" h*Jd[Ǟ~84޳zvzJQ^AfʳeVe!y=7XpK%S+,Af y"KY`,GԞxcƛfldn[2n_'ثY/XDpH%I#O:i A[6*Y(z#}ho#}ho&aWo+y8Ov:XclԚWHU.dGG%+G_wO~6C\{YQ>P$_`c 1,,~5\~Ʒݓ0+f7_{q|^q';}}_tڻ^LxwȻ21~VU TGkS/ZmvORcqZ3*A}l!Pua왇T^*)X(.]ہYI'_7oq=?oq=7d>jr;^&ose BG꿨j2M>^M|;j1#ؕeR?Am|~Ʒ~Ʒݓ0[Ӛ5wf;oq=?oq=7d?}crԯwo2ibvo`GRr>A ۻ~fll2 ܉nQy9o5o5왇Wn}&J#nRFl|mAY2|8P'^oHZ?m[z~( _#6'zA/դb)N>LIryznF>~왇}5Fo7Տ 3ܲKQ|;EB9gi<12&>[ƭnsߺko57)×ސUq"/#d:)yO:nɘ}_;0CiukX XeT_x'9$ 3_e7V^ңx半x`G ݓ0'oHZ?m[zHZ?m[znɘ} _7oq=?oq=7d>i7֏y7֏yfH4GkOGkM3ko5o5왇 5Fo7Fo7vL#}ho#}ho&aM|~Ʒ~Ʒݓ0AoHZ?m[zHZ?m[znɘ} _7oq=?oq=7d>i7֏y7֏yfH4GkOGkM3ko5o5왇 5Fo7Ԟ?\Xj+vp̍b'[~x[fCt7>.IS&hOiT^"V7n>$;ן]V XZҠf?5r~~ݓ0'oHZ?m[zHZ?m[znɘ} _;*z뽼]fCe5*(C#uE1 O 0}Ԩ;KױP<|H-3zko5o5왇 5Fo7Fo7vL#}ho#}ho&aM|^FwXJ^a#FHZ?m[znɘ} _7oq=I\s[-/o%UNҮcg1Rb*xnɘ} _7oq=?oq=7d>i7֏yp(\xlcL5jHEA;3~j;&aM|(-ՎSx/ұbPO XUrr9lz]{s_qӿzi7֏y7֏yfH4'>沐qiMۢ{J8U,YT($@uEi^WF(A(R^؁7 fFޤ)WM;ਸ6!F ,1"B$^2)t#}mbC1! ?MfaM|( `SzAa8ix쥡 eIr>>u/{4&d @@<?b nszko5o5왇 5?F+.Ҽ\PP9&['n@KX77`8e|lq{`fuz(v7d?}i[}zCڵӣXA GeFoq=7d>iK\&v鯛7֏y7֏yfH4ϼ^v+=kԪPU(l $'N;s׏AHZ?m[znɘ} _7oq=LY⯑ Z $v9R7b# @?qvL>#}hoDŽWHfponY%N״Du-V&aM|~Ʒ3=fP^8r괴>Rx,C" M3kf׿\sHq7M7npPK̪$wן]yL}*ڋToW^V2 ?VfD7>.IS&hOiT^"V7n>$o5왇 519NS Zy*MfƖ4l#sVI;%2bok]R>$ToIZ[uJPBzbxvruVԶlLGlJv UH@x$#?HFG^wbe82m^N@ ܑH?:4AuS2vldS=l.]XitlAIѐQ,@'[{ ͵p25p(u\ 41e^> ;aqYLN,fs%~n* i~YO < q6|4۹v@R3ʤ b8: ɧ;:flyZ *AkXXDy$q!3enjTLd)$ʏ:r2Ucu;7n<.GvzK*(IV<~iZG?3b5g1n`В4h'!`[E;v-+ޔnDwhCyrXCjṵA`>#^YAI+cv߱n#shG0iGh$brx:obmS/uVv"O:Yx9X ixS ͋ݹTWA`gp1~ʎtְRi=Hw$yus? U,Z<`}%a,ONB|vgjlpm`Lʹ4QCJ7^s$C+biӹdhVJY0 2˹;UM,T <($>ܗ·zbjGY/YI^a ’I*=(Ha @:1]5&y"bfGqv +яCǝ.oPU1[+=xķs/f1I=h#蔘Ó g,\&&Nt@:3TYyl܍.cbn׾Kis~q.B q,5g|n2;?KЭ!:6^5ɒtSVHrʬA3^@RY;|{6hˉ^$eL~_ɏ}bޙfޞwŜnF1e{)iY˖EH#00P[eIO ]&R WDVPǐhac,r~p>xVwoVYۘ*-`򷲴sXzAj̜ZB,oj3+w'#7+Pd+AZI"PDž*nOۏ/MZ#9nQ s"j\*Jݸ<㏞D6O ŢO~լWxn~>zHu?b4 5/[kkPښ8#i#,I! Aڻ5Iac#R?'yRXU uh!Ԍ,8(sa' ⼎9VN:?ujV~mieoTd9*,D_Ev~@RÎ6[/iU󿆭br4Zf^BAx8{ߩ%8h2 o3$[Y!bJu~t_~mwnR7V& ZY(0b桴}6ۣ5UKf&G*IdE`;9N]nT1{S57;9f'PY|3OۂEl~x|[nMK-ŷZ 'f0pN^~z_+?d1#qKx|eC^`¼P(^a$+ gG >#KY(GąS0:2PR MiMw4|l,L8aK jg|NBBCK,ƀuGc?<=M ޼iUYYT3Eyp<xI;Y6=C>Nݻe;r~{|k;?N3ۂ흵૷#I;W8`2 kR+C6+_#7f܍jWJM"$~H"DңO|KXVEyr f&qڱv T 䆳B{,{c6Ɇŭy;a~@N D^O-16eORXpoLmm[{FjQ.F8>=礯r\*ZX R J0B3boDZ`cb^k5Q\ڙB nMx\mP&B)2DlWuuIK[,C I4NHB# @56 7 |x1Cy8#yU< z fbcsxbmPi&z@CE$@*6V<}\m{p6/''N#=RtV<$HFbV''#GYlEA, N\Q^?jfJ:5^ѵfZb^YQTRǟH @^ANڵ[z^j㲾O*ږϒb !(R<H7hptG[dO~jH)]Ac#BRS ŒbXl|v-3ڭxߞ!xWNkPRxnG!H$T>\Jg1w/vwbFŘ[!f^<{ۓge*Kh&m 'YLWL pذLR6ltfxk zF$TFZV~e߆˜ o ;l8m 8zC'\uE=d.|\v[crˎoe䥐+R1Yq;ryB W'[-KTX)".y?jep=a*Ьge!n# ,LïY_wtmkf40d*e$2/}V8Ƣ2 _Nr\vGQ=oGU y#{Gm̧c! ]ѻ)FN:Y~u#7+4rqҡ`dq%YR4؝dc_ǘ<ܿn4䀼$9#$nwom#9-*a- pEb $hV)&@12|kם`\HbPp<}S9]% 5NJ3JZY/5rSKxbr5w]xRNy=3+٤2f X۶k"rXRA G~>FmTnf25#w)%|aYeRPO Ƃd= گܸ̔$5iM AiCG(>YTj z,W= hJlp 7X* ^9P0m]>mĸ's ^{#/<ʑ^$/w.\gjRzXrY@~Bת;K:w6>يS4*⢁q'ojdʠ)"E'#֫^׮y`UU\{"ͥQ%ԀCx(yhCf󕣉S:r9Ԫ~/`/u'5Msnn:UZWTw;(&xu~8 h,ގn[kxf]FXG(c,돵G^$# Fr H}͟>R{l`S-+VY}Jgbe%I!ԯb~5N`ʔ0-Zm&>b- LUxGeeoE+j<`-}#sɔ}q: '|vǣJ;o?.>r|#/H: ÃxhZg(euֽE$!,~e2udAmOhn 8UI#6g>C/^չ<:~̮19[Ǵ5@6I!yyx P2j-בj6md$+s {br;teb5em6Io\%['rkya~+pEo9X/ h9笁:u[Virw0"Xف]fPyzma`p.fVJ6QjV JpJ Q;rϨ5mCFоOV(I sپ< wj+X^9qjЮ_9Rچ}hݑY@1y<6F\ncsv@JG*c`fvJXYiUIZ{fRH eE,؀ p5d2b.m$O% d,;' U'O,<$5vlH-]YCB[i!UXgvvV=Ós N"9dOحw9T:8mTnf25#w)%|aYeRPO ƃ6?ǃYIybo#^cglYoBޥBt3I͙8!ۯD= Oob`pMGC78Y8[1_X=SXRTdQ_yd?ABc Co5:[g x,~1XAxø> Y+0*WH]t=_.O0S"X'3p,,%`2_FXs1S!4FxJDprWcpuv, nňЙc+匒?u$: 砛-}7E 9,ej=FUiQi ꓝk휾K!g-4w0 Cs'u'neɥ|24g[B% gDR6@ʑ1 $ ⿠3f٫W3LE[x[4q4]:7ߧ zCqޝzga٬8ԞH`(ńe#R$s}lzI&FY\uf'>YXL*cb1 EdsEoN3:wV[w70Ol!rY)"aq勆bH{]+8ֱҳ>vȻN[ƟJ^`0&2c):nZj8RǴ2,9< kI>Wahe]ՎYo10 %CCl)w^.}:q3ehn؊C%X# GH bTxqfDַqBCeK&)Y8ĝ샞uP;W;ܯ^Snђp0Ȟ2P''I?'yC*PoW+34~UXÁrT>y71Szkܵ|mɯR+-ohTƍF6WnyebzASjrˋNX-n;1SxP(k`ujSi*=/olfJ8hׇqQ"2K=M$C“ݗimx-r6EG ,DҢ9!$xyB'ѽYܻ<^Vn~'?InhV JjK,cxBp\+ܙ:Y[b`bX$,y'ڙV+'ZxH%tǺ6켯?PAⳛf򧷽lnJXq۳^{*$q;dà^Qc+&]Yu"R;7w& ?7}M'#0Y7W]ڶޞf[@c[e<,Bj|%O w _yW቟=&:D(9<2;HJѤB[_{[SjLoT $V)5]1%feNQI mwZO=:ᅤfD|iiiiiiL۹L]2luңOrXZ0b B ˖Xk+Ջ! u+EMO}IǎV?Q/Tx?#Ac+g;ZdQfKGF2$8q|Szl|J]|bXZr1AeM2;FxQgnL{VR|CWjQ1<+,2JBGP粐{cŭ_ c2VhF42FtȈz[ͷc95a"~ YiE G$8!2>VnlNM߹w#bO+)V"UO+/RǯjU|8,՚`,(I0 |/ki\48ZKU2=ĝUS$ُ¯<=; b˼tnKOJ*PYfEDnAD9kv^ Z~⿒(Y Kh~܎jvR-B؅9cuᑁAkAnzbLv*zAЖnLPL{Q,q45jع|KZS ̮oӑӐ>)I@@5]4;ch2r*6vbl]XEfLPIۑ&ė Qn:⽅\CazXk,#M/οp켵(Xk7r0V*فpc\mw?evZf*kXP9TWp>9f?ru؋ԤKfаק^q:uSn5pj԰JZUH9Y$>3dʹjV&űؙ"F@PMU^+FYU|>OV/xݿ>࣒ܘ̚'+) !Gca;O'DpA9v v-/:޻zy;&k!#B,b2T8Ac)]o !fqI&BJS9T߀ y^ rRώ~]N @!K8Hxש}?JvK9BKsBZW{RYcBO#}ƚ voQiHO3rGb2+$Fu^B:[ol% 5Jc潈yՄؑsbb!?=~E('>AziuьFBBiЯ8Uyn Aؒ*> B\Whl=VxU9 #-v>xiַWZ2erjԢ`[ie x<7=ս9LZ<`c O]5՚ɓ٪22?Xt7eRigl{K2pJ ԁ xl| >GCz<&ѣv4$&2Ih(4o\ڥ3MNեh) 1I#,G؆ OqZml&hUa9Gh?(BL\3žULeW{~+cÍ22d/Z*cWPʫp_Yf [mɷVP9/qo#qMNz篘q1 )冸=NlZmEBn8=Oa$uЂM֛f;V]Q9G!6 [V=9(ձK% & >O@ ^kϻ/p G'&6Z +jXVZ K>c Yg?$­-)d) 1I/f_ D?7+ fF0_ ]0?Ns X5qXml&.lu6i0zm}G~ 9,[fس4U]$…ʠ?ہ1 3 fCzItN9`14l]BTaˆ<>U;oSHMJE 61grKKy̍eQ_j^5veii +噘I$um9aw1s$53 ϩVIUPs?|L}7^77"d5xL2{v^)><yn:[fس4U]$…ʠ?ہ1 I6fd Bv#>j0̵n+)>Kp;p8<杦㺷;Xڛ#Za,յ lK5 v#A~ W'fҳn Xw;;r:r-rPv?EUM~yAlaziz[9jټ 'bRݏNxA$Û&}79C%Z$G+ȴTY!Pbk^3{\嫗O,cOʳb  8I}.])Ro̎k?94~8P*pLK?Mo醧E0Z{aRzՅE̽Af2AT%G~[a(Wx[YjY+ q׺%f*15qt5-Mv\dzjb(Ɍh}W-Y+tΫ~ά˗V}@; F\|}!3Fd>|,c.r4w;jn+iܤ!#/Ul $L~€c퇛P,TA08>PĽ^"Đ,s (Sw×x\%51^eNϑPaGnr>j0̵n+)>Kp;p8<杦`[ũ 0T _Y,ܙ=h*)^YXjJOxNeY1@)9W ^ooԿɾ1YkYW%02ċ"27ٵ&!9\}92"^bhD9]Qhμ_-jrUk֖+kt9m"rdn~GsΨᎵnE+"X8`:?qT~@?AW=5iU:z'9__'QJ~ yv^gv2)1_JZAJV) 8[oڗxe0x%dHbk*8r*EPnF{+ޟܗ07F@crUD/ [)Gj \EV8sjiʈfpP'V¹aN@VX}IޛK; ld.䯝!U.y!FYkb Wꏷ1zݸ7rLN^LDXZVh%Dď;Ρ'nf s{熏''L^lG6G/^.VnNjxGy]5SNTN8`@{lѵ.*lNOhص Rycc4sZ׫?,ߨy{Z;X䖜XPK0y9c=$JZ^k-*׈8B\4BP{P2IuA6[۹7^ dQXsG",ȄJ2@h,8{mj-d 5KqRO'5[+<4Lk%Sv+ҒYJ֝tYF. ٹ*՝;szqGr du158I==阡7^7 M=܊MdjTUy[x21 YT9 Mi]p٩*Xmn7$eq@FvBSX:@EM劰dY4\*"PD#d3i: 3 Nrp+Ldə񴔬Tdh#ZjpPIPϦ+:{b۟<||ևw/Svᱞ/}Zqgvh3KrβjkKga22Hy2u$&, 3=JH8 M44MM44MM44MM44MM45州g h2okZCwUN8٣"VE*Pgf6^؝YܽfDqoKs!/Ў6bhg_'W#n+R8‚~Ŧ+0㏫ת)`-lѢLk2d(%hEt쌧9f Ed=/mQU2p,ԯ;y(]UPǫQAG8G-c3qwLҤnx:JI1,w#6.Ski w$Y9iY@:v [WdffnYVa Ad :M@z1;\fTzxI$΂)K2@P->stR4d.iPHG,KC~z95iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+_UK_V]/\>|l s .Oq+Z,b#v%|xظUd@8 Iv1eI)ߕe3`jb`}״_%^yeTבێ珸ջr-zq%8Ryq+J R+'YUNw,d677ǚRKL!t($h݉5sn{y_ c~ܰB"2Ln|h?L0[vRg$-x,akS,&4)(.|eP& v{{FH?Tnz[fX zy_qBGHnuoz`ϤxA|GQ@"I<꧆ LϤYqfX*X4P^zߘ#6{Z,i,YO{|)UMZ+bߩyMvlЭXTO piHSe!7v*zu̩:F\p ?ǟWVlяc)/ VĩA ŽNvlB{5-M{UqM[4WYcIf;P$E@@"-by֛5GO/i*B&Iey>:57&#đ5p^re /Y~8a֡v68ˁ>9C%^K.[|jobm}n-a swFd|)h.FTrG`!*OBb`ԏ&XqxђV>[ѫ2t3UUUEޓ!N&I1 [;/>\۲$9 pd-FM,V13^d@<;hij,ٺX*Xdr֖vkY$q,O!=/GAL[oxn#+1R籸SBKy-“Wrq,}A tGػ_o]{3A iYMfbmq͇tnI4M=PĐ@H}`+ke6.g0s%`,Zi2ĖZ8ً HOvy?'g3~fKyᚢL1Tr#W%X)`V3-GgZ_ V&ʦZ9"~8:H7@Uv{G1=[QIH0)r>Ƃڒmc#XT:\x~RdjHV7d=:ۋ-|Clݫb(e_,qVvh3m5iڑ;;g ؇?{ R}dzP̮,;p8,:yvo !.+,lel\\Yjk4!,(X@ h2YpЗӥqv$W!5}خHe N2$|j毈ͭ&K!-igovAEG\"p4;՛:m]m!unΡ-x8_nݾA A3}GE+eDX7K\['ON"^BqsV]z AJΐƙO|j g*ºD+/.C.!oK/ }S,RrG$9rKhnrR͓KwZ̎#GhR2[b8?Qⷫ7?TnݫV.8$$Vt 4@M4 4Ҭn#;*֯[ohT%߉Q^)+fA/ÐH(kVڛgW+ܹ'c 牱R܎W>]]Fe^X <n"zRE8M,}ڃ+ Y DP僳(35gh2Wo%4?'-Zo'#y-K{O,_ڤ؋Ʊ7ӏo/ y1?-5f.;Ųy29k>,Za#i糕y}2NvMKn1{ s>n³Z5 05~Hcb35[M3nvb\D`߯}qHͺqRI˭qg+XmDoxQؑʹ-$,ؤ# ?Lq!tZ+*yq [1Iȼ $Rxv`:(4]5mx|u_NgWo]bdv/(^x*"nm 6/xvZ¶&+İI0*a vfevWp cK~"+Ԓ5@:sG Q[?$= 2c2[ڃbE W@?Q=xV"l{frYSm$WbWIBFPW N?VmnLh1e[qٟV(b>ݞ AioL?Xp+r8 ˽q":2 pT15|>5}ӎ5f,1p X`OoJ!FbU`[m`mb3R汇! g wr$+jѳ;-yc(^:C'XefnI~ZKk].괗wdqqWZ#Z$Jցl{frYSm$WbWIBFPW N饟cczԛ-,5+f̒e,]!ljeWC/@>8^tjG'~)J7S{Jtf2DT녏23rPN_tǍF(a1v5 ^W<8SwuA3yejM-[/υdh򘶡f2Ix80!<SY]7,Zx?4e,0UCTtP8A욾n\.43ԯJ9 K$Ry{}1|^Oz&")H+N$8dv}FO~w-M.I*8T2ٌ <;Ni#ϙhNjRFǏ-| P .6~ ֿfqV+_؋q"AF2#5HW0TᩊьBWS7Bl+~X4rJQX]I^xS4֏n/M=R4Ov9Z̕呑^)iĪPKٕ/8lv}76v ]%%v54r: WIg-zq09QVveA<Z>\~Okdbr/U}Qb1iNyx'ژ O=-ˏb$Ѝ,nZ9z¬l)&naq1Қs;$OfYf3swK6* T#~z/*xԧ{wmn զ{V=rrX)uVt/p䱆PiB̝Wq:JٻPm[q#Խz\N玤Y~y8*=ɃDZjx쵪ط$̊y?h 4t[mQCn,N> K 51+De`d~KIWQ}9= FȽC{9>1lMs S!4NwNK֜meֳ13Yҟ=љ9Mӻb?:RZ?WxJ/rU54bD2<+pl6 M2VhU(NK,̤VT|sΦ^ZL#>?'YZ0zyzp珎xg:kRzw7K/[25^L(1@jH}+@ꮜY qsӪ uƉzڹ'Y*dَi:䫨,Ail}J6)3ᱹb[[5 X )Shl ڛBk֖lY(HfU㕔䏂OΫ:h$-mœđADyٙXx}( %'U3j?^BNlp%u~I^ ?MvlW'5tqb_"ľ7~~Q|\!ŏ7C)L.eU+@#IBˢ;x;2y?MM44MVܖ§F+ D,+,i`GURyKM{pv&ҥ5YqWk+%Y&b Ooݏ!mQkfAoĎRer< : :e^o{]Q[%6RXc<F>Łic}A8(6~lqjcK2F¢"әnYdwB@xlwKC-emjŤhʸB{8՘Q[+oy)dx 7% Ԑ2xx2b?'6vFBJtu! w~XʭhFPN27 !Ł@7^;IbX,C$" 2a`I9$%n(jےސ]T~Ty=ȚEec-"׌ӨO:in/PryER15l<_d+Dg!௔P z*v` rFW9Y0VcM yp,"Gȏ݊~ A`sW7\f&^{i@gvw%B >y馁hi<6n+^8Z,` eE S8n p[Ajrc dX"?zDR(0oC`ybG_8v8L^8 E~Zg`kxL2ƬW29'oM;c~>QjƒnxeNOVH%d<:eI={%GI:Zh,pVnvƼXQAV |v8)Z>A'_owfw)oS׏#^قRaE_ qΪzh/wp&_ 'ߟ'?< rK|9OZOtIn{}Juےސ]T~Ty=ȚEec-"׌ӨO:ԭsl1ѯw'kWxn! Xd /ܟ~~44^\ymOlmm|9 UkA7O: 7yXS2x(>ENGqS߽smA+1L˒;ۙ0` 1st^"+*l j,C ozƌT+R8-zZ`p9d RǙ.)𠣗R{ƨh,イmzhjK8ՈafT{aAn7J\ְrᰁbld)}̕ ¼ )_)ꃰ- > {u^MZ|}Q3tsvlcO د XiIF>r5IR#dijCZS ጝf!@U}4<ĸ<*1RĘd9Z_ "3 rDVڃjۉ&ծ xt@I/s{[mG^dJHv,1TGHIK݁y*ǡ%iL90 7C׷zٷ_wS iZٜYzTY$MgZ>ݘ- ϶y*_^T䲶2 e1ӵ;s#A< )!u!x#M rˋ۹ ~FP#-(h'eXNvSN`aV,R+גy2RSan[}4 ܸlV16~.*#YIpȰ%|$RI#<G㻼s rٳXo Bij/)VFߤVAjo[9 ̓K­\,II)c#;`I G qĞݹ~f/-vcb9ex8bNceo12ip×eZvw9f]Px^oĶKS`2[mXw E{HQ!9=[#T4wfy0uq~ʒ{{3XI%,Kwʎ> |ZKyv6oۮoXfp"ߒsqF cԼ+Gi&ջu%4Y,I1df#̿Ž+xټ,_%w=^'(̟.yhnQ~h.osudPV`CEC#7wpŹnxzCe!o!s?nŏpޯ*T1E6 9<Ӵ]b&ɶ &46u+vۇ1_pR@M4 4@M4 4@M4 4AW=5iU:z'9__'QJ|n 4)XVњ_'ġ2gHuar8 X=@#)URETx)+ZpQ򣺫1=AQtթ ;qZj6eY$sیU ~  sjg1'M*""4nB9M>gU#F$1{QTq3v~Ȥ2>vt2yK5`nfW3EѸR珒Ii+z`cIV\G#zԕa+ G(1M'R C}n ;B}]pʒ`I+fD~ݐ1 TjozK[k-8dҁ&81$ʂYJ @H7Cv$ dZ**vp~Pݟnn9 vC}z:iQyC20Ӣ$ߒH2ơ7>ijnۚXђ CMQᨨEB!`ȪA,A5 4z;qR]U).Ќ%?m12#O ,ǞI&#rG!g!~ĖmڕiؒO$uA`7E-6׫,<2IT*VWB~ |3sctl{5[gH>;<|x,٬UES :q"nWG'-4Z+iM-j'2bqX?@X8 29lf{UQ¨UPPh,;Sy= oERʳt6%^BʂToï ?^ɜMS[wzW,,,X܁<h,ུ v M~ Irq.&XEg€ņ_k h[ \s#Q<<8ifNMV?b*TxLYS!u1 9nܞ~Ozdwn\V͉^PTX^WD v%:領3 j1,Ԋ(ExI:ihihihihihihihihihihihihihihihihihihihihihihihih>'9__'UoCW@է+Wo)Wp9;w' ñ dln5Df # @F' fx!?$6SZUmlN;dR327섐:+ r֤b]r)%[QwVuIr \0wn`>1lOʏ6N0ihOY &K,`Ih^/%xYP:( o 2{^l YF6P`**3wUAFH=}*ڋXث*H<0#HZk#b o_-ĤYr2-k87p+< |XU9W-Θk2AV"wfDG#Q˪8<|g\ZG-"e3 AOf_$^Cm?|jM󖩙v3R:|vo"7À}|5F_;K&?/RjY:Y _@f%t1weB}?AkKU5CHʬy:ط6"+.R \}"g _YWE$K;@_ (5ɹgv RWN;g%p%qhbevYAb[Aki.ނ- <4$1ǀY܅Ef H v;׮m97SElLkQdh(PZ`JAn/XnZ+|uhMڦH8PȝFCʗ<5z=rt[deF ݇%c=~ e(~GyJ;5F9hʕįGnda\|gqw3L ^<)4Mʒ>F9Aܶ~;z~zIo E Ğ rR2$N1c9b+0gn*Zh- XI3qܩïBz)I wPbcV.Id`rI륯pa3jHp](=CWږkTH_#21iKjҰ ^ڧdd?/ϕ)|RZYSe$5rÞC_2W{M{nXh^0xYp0ٜ*Bz_TE=v=f:y^G ?X\c2Gs#lnx[&*XGߎzh[ime,#䭽(ʱ,,2+IHV OoBrͱ,ZpC^sK)I"efg⪐ʠpƷF'2b2Cb!%eHՁRG];-P=զn MI"u<2`AF/Pg%pmJCw ?f@$'=xݫf]f4iF9AޖV:| ]#M[(?X#d`W$7s]Ë썋rm-4,T$Taס=~$!Fݟq2;~٨nm8*ʒa8lyK0Bؘ=F"ݖY"(>H=$=% 3q'<42J6wr夑UQ kߡ.4گI#E,<,fBds7QUbK}ulN;8[w{Pf.Jyo"pL;ۏsx6,kXKmz̕\uigiQz{M,SӝrɜP%"d H L*A U )&X~ `w1쓉j*" :[7 }lXܫt72n(I>V(كTH+u p>u7p\V¬/V-r1V '8Xl'![mc ǔnwJ@awL\BujW, X ~_}ycLlx,~: KMLlL^NeDBLG?aI40l-ϋ;+n/{B;>ڏ'ĮgvdT$ԆNf}oܽp؟#˼WD!rLyRI=Yy<#mWV;T0qǂ }/r!yicz*!랅KWAFi[*^I] 嘒䓭HaW[kۦ{^o^U/JXk4 xB#u$Q"{rI=G`qoѥk {{-Y뎳<~8x*/_C#cɴ֑jzs.Z۸3|\v$Z,|s)Uܨ"ኣoA>e6+#A,n&5ݒq-TEZDV#fCrb&Ym'0yJEnn΢uˑ6:JUy*ţT^2*9$7yzu$4v2sWZ tAV]y 3\Z3CNeX(˰Hл*O$ h~1̦6<?%r&&af/'"H!&_ܒ:V7EnbUTr:8  ^UZVx&:YOʰ #\]`?3yRj,r!&dwo<oۗ'2t1qf8٭yIyVVh[dT~Xkb|U{7kfʴs!HW8ǖ }3D>B_hVېh/B:)$9eV / ,Hg:khzYjٰ/%jDh=ܦ='d '^AW9r^e-j﷌-C*G+safW9)ߟidGgbI@i_g/ 2Z/E_$1gn9bO@M4 4@M4 MmU3bRVՈ278uyznF>~]hcl12Kdrv:0Bʤ!{΃?Տ >gv5%N״u-V=p5d2b.m$O% d,;' U'O,<$5vlH-]YCB[i!UX/˳lsl 3 cqZ7,d6\ȿL%ʤԋAl#AN':lom[Ywy,XP>KH~@i=.*LMgߊUDDefHՙFRj0wpJ CP׻x7IΫ6䲢Jօ.Wսcd32XHuS-vܴ2~1չVo 폒䬲@S*)J_ëIjR߂LIr:R7b# @?q̦')K$g^_)1Kxn#G(W3WZbˈVrʕ>5+En̊$7#dէ5K7_I&U5/n)ۚ$b 9bJnAڻ'rX<# ،Mv$缑$rȤ룻moOzim$rL1vWe,IIR>A#V王sQټ$TֱVB85j F1Ih˩EeW35Ӈ%[?{U੐iLyyY[R~@yDTFGtCcj;u]Og t,o fe ?7$ [{nݻcO cI,%RFY|I* "!z-ߖ0Gleafl+Ҹ,J&HLL-)^J;!O%nXqG#4pO&x$t^Jool0orL:i4'])bVjȡXFha-eqٻbQ[dk8:y^}*ͷ1[,2m􊌂P%Eï Xqא<6.b1y掴{ҷ,@cۏ iS[eajwQ!'I^' 6{ߩ%8h2 o3$[Y!bJu~t_~mwnR7V& ZY(0b2-5Y׏!ŶD [{{IoǮ  oȿqT߷x̥B(LH?±C6`⇹R;KױP9@v^x9nʖqpcyr>T1~`pqLHU8ӫN)5Ooe ֔{M7̶;I 喇bϛہ|Ym{o'n߹?=5杏Ks|UvÙ$ٜ0`}ńx)?6i~Wun͙ڧOF$XՉQ>"Gq'ӛX(}#GrFYe$TW+=3Ŗ'IRȀ`xK[ubv!V4yO7f;/ms:-C+< :^ׂA\hdxaaŻhY8,hyXG !p ? JC) ;yjXdę$v;ݽ6|_ڙK͏Io^6Sr~eV-,_M՜Yrl,$4RhSb:X_@ݽK\ɹpۻdٻ^)qr0xԩbFWQ)v!UhG3"^Ыoh^,}13͞ܓٶEl%F ʖ_K2>T1|+bHZ,\FIeE5r8n9pW@ӂbLt>ͦB6I]%5?</Trcض)f3ɶL6-m^IS=pd "xC&]b"w z(*#HU̱Px?#P! " 1F@uSI*~8ORlS jbQ,ݹZ%e~'' (%fK;vkG\kG dz8KXv!h4Zq%~@_y b=&X`8ݏr~~l[9Nsi?;zUݖ9>;Av.#aX݃ۗҚ oY໘{xH3aļui@xbޛ h{ ucˎ-dͨ fIJoc^=;jYHRkEnV\G]K!VVSOʑs{gkXߛ1qZjyX p=- i@%t8w=seؚ|o7N%aIz~Hc'AW;mtZ15"hG 8D[E u??Un,'3V󳿛m8*_eIbĎl"dNM44MM44MM44MM44MM4}?Om/E ZrvNއhNWIR9p3/ٛvSj†G"Y|s!v> S׌Ky2cֈHLr>I9<}?}Qp\rboDS:u@HPH}֕mʞ)cnn{- [PUo}]^ܙ Qs;.i"/4u$ s M6NF\J /jc:L|73,wX1k-<3KMb\*A (IVI@6H20+˜63QgG(jȪ̋ Pd21JYI?[xPEѾᧈpO'<*|r lX]kUd#?u=U¼5wAKnG 9֓7F߱r3A^aƑ7Fکd3pSc16J/,wd@ZIݞU>WsKq]{񘳲N֙Nf"BK13<G[!,D2vrLG’;Q ~H۳ kmnܽ$2[^ &6x$Wl~&dkYvbDFHiRs.À\^vO;g+ #zK[ qUA1DkKSßpmWvn5i[4 ÒX%Q@n&T}ތ3AQcSJ%Y¨fX*~xmO䲔&~fv}MA(G_9]{VLJFY%Ïƻl}nm#F&'@,Y#ـ@?Sod*e1nZJWH)Xw_ TW2;b6n~ߙt @&8>$1~G݆rlg>T|5k:[{anm^g5z؎+#,q$T^@Z==ᰯW9kuE*ድ mӱ5VF"},H"WHd-w*FHオA:G oG2[V|ԑo")_Rzsv*z$}|QfApumǑ_KF9|f*+prep9M:W2l SW,'0&[|m:c=DtZ|ld~ 89k6U2Z:d!Fʂxyln绺0fa՟ǑX}/G*>@fxw)Vf%zrZ^D*A~Om(E&J6*5]p:}oFfzQ*/CV̼Y<+dq9_Oppk*6Ih'-uYjSYV'2p=ӵ/a4uB8vB͘0HΪ0@Ďsgqui[rTkNUK 2#sօM,I1tqbARʘHdŁtRxBy2[{t4bWʘw/4nZ OiFrZ0 { ~x۳ 33AB 1#tg%nn 7d$FiGm̜Œ|s o1.ȳΝ^,Y,OZB#bX27oF. u+rjm;*eulR$ C'&6xɟ#5ϿSP(C#Q5 ;%f9#oq9=}ՎSի+I+U^^8F*Pa|ɸa* {VYV ڋݓ1'p{Ð9^Hx7)`n6r7nЇᗚ+[ߐ,X\33n$yD 'g/"/Dvp[Fonvb18{AhM$h<\#pո^DZgjUi$ɓkKQY6K%C :)"eb,gkc=Q*o~Jz,9=mf va.?"~y秷_8q.Czm|Kjw8ػ%hUoba_0*Dj9_ X;[!]WQ3VU"ٚ"Z[V6*#Y nrש^WFx>,*2+=%PTJ[Ve_seTc13HO# L5egh q%.#/TһCԈd~ݸ@=k/Eq䌖6\;ː(ZvL!fV%#G!We_oœx6*q&Z :cNÎյͿ]׷|ga1'jr㦵'8Xhihihihih>'9__'UoCW@է+Wo)WxO9Nن-f=ɹ)jƏlZBl K ?%חPX|\wM屏TȨfUG$$o"F؞F=qvNir]ǴU -I'[mC)_Ӕ|#=H䚭qTv+E$u!]\7 R#R-wCQ} d"?p̝_c[~D&gg+$l%Ai=d'L$"Rf{ypaB2[jlXeV"̌C2oNl:2 x#zՆeOq"%1A%$fNw|{X՚jW!,Wȑ OGV |V"p[3c#ȁ )*T A֕}G\mX.&LH1hNd>8A=˚.k^#I2Vw?%b?Or_M4 4A+_ug%$"<½cr^FUPM=60mŸc(UY䕜GVVSه 8?? ]~sr2TBa%3CGU'OSyI&5Wߡbdك͛%~@hQl7- O#JDX2tٙJPx8*96Vb#sݷJmaՕlEHІi&=G~fBk^;(HӪ7~ͳ5v|׋)SZHT*,_IE k.n cDtOX<'@אiiiijͰ+r>VmޤPYVĉ#P!d|us)p{ 5[6g=vv/<]zyUpG+S5}_jY~4K嗸1w5y=GΪl49b#(".xiӳuSFb'WpX{s!yqvm* [趚+;V@$4t .?҈wGf{L_K ~~VPHj~_[{xzqw>>{kBީP#=0O# oƑ֊ %U*$h:4V2P Kmd@I $ rG$Hob<'%-"ktIX8ѧBp$ ^z2kgtr6fqWkэƫnh`nQ/c7!.޷6u-g~&u$Y p_)n–,x ɬKIF+Ze4 SȍPb$B@ןֵo7zrg$:5`Hd{%;`ȯ!+v=>WcfWڴ([IF~V1r~ <} ɴ/n;6QYH}G 9c>D axleeh2׭I4݀ :IP v_߽x܊GD yd!Y)׿u85nfc Fvf8J[~;9ݏRa϶Vf7@{$/~{Ztd1E^9U=ׂn:GXnGSuV~U+RV'ؼu똚֦I6[,g`Vƹ^[-~2x,XzYx|*#C`-B[6.nW6 ʱ$ VwPG 0_%:V3G,gO1h`pGkH-+n59)3#?f87%==RHb,GxxCyB#y\^e2<ղ X^=hƑMbTH }OY:?K2{k&D@"ZYeknBUz*ٴ!mqL# FPn;J>u \v RɒQOу݉xĀ$Ʈ{biqسT{VNQG?ͭm_!Z,1JVEhHWV P<>Wj7+k5kQ&F;F)H]'"!=zy`l+h(1YCIL$C亁a? je&bvGZyHM%.# vTQ-ϰv!qC]773d"p*οA[M%:BnK[eډ)%;bG 6"ffRGT X8RuؓcϝGq斬ڂPDdyGVP0R9N>5}^[y,䳹4jH$H^x9瀫,dZVkաcVX B9F`5Rr@rE}=4oy2xY!fhXTEJ̌f.M  q>{m\V%g)-:Vߒ|i[1t1m[v;sSs|[Tf+;a@ ~tb;r FWεe!݈!r8 A`LLSO3P' Ѡf/'uHۀ vIsc'(ja"A @&DQ(y nڜW>V|ef'( b@:ႏoVJHO 2s @Dox('Rl.lH۲NwNLe{cZ-D^TurY( Tp<*[g_b[Wb޷+30c Ǧ[bo-dYzBt~āՃsj cM混vY2MfeW3۩葃sc4g|@)t14_Q啫NAB&>;RЬ-$T,D;(Ny)_k7Fp$j9I'_j|=T(H"nMpuVgkFēfgT<'=af2u܂`0rK,B7`~% C\N+ekQ!^wVdkkbߗv$G_$-zMo?^N;/N$ZtHAe>dpycf.-eJ6,G!2~;÷3hYy/lSte):uF'Aֻ7%==RHb,GxxCyB#yZK B*č4 `w!Q~~Y|;gGfOmc1սԤȘzVkK,pbUJV2Yܭ};Pc#^(Z2ip^$VHX<N#>=wٵj}юjV~7GG5ٙvf ar[cč"4Hʱ,+5͸ ˼(Zg'LjRXic၊eEe2Dx<ӫymoǸlՊ9٧)fpM^{FZh~Tۄ > @<땪kw1<"Ր(nŔ9jcNyw::eۂ2'.lAT{҆p1⭒da)Lr@% \' &o@H=FOs+M7EfHed75/U/b}6ܷ69_6"Y]$EH W 9xl x2Lαᾦ-凍ql]WjQ6b~=0u!$5&ٱ9p-`S^yՂm 9%r Y,XXF^˜ 7<+u &iiiiiihNWI[=5iU:Uf,qqno-{MR9`x/<-/Xv5$sjYʬSӫ9aBT|O8v'lڳ&t䫏1핍$Ƹ1yE%OםG7;^ۄtQKQ'XXXfȢOk3 hܓ~~6&ݿjVNK^t.'H@#iRe|9L^2 UnBWH/4Q:+ݦSOOb*?[mv;n %9'EyH +Ê&駄]sZlְ]bA'-\3hb/FI[o/F՝Ź6~kc-r[V+0 Vfc*}(WQ/O␜8)7 xU-9n$'ǾXJ{{p(Ak*(d$*P DHFG8h|θho]^%kY;ʠv@?P{zq;.ZK, NH E^G馚iiiiiiijx:^bwtg#rGkQKڸQ,~̄B:xوa.hKkZ>W$M2IVHmk^ I>4K[Thsz85+JfT1fPQ 5l\molc+9 o|iKN>y<'oovȢ˵JsH-xR SӬ|@xSgw!=СnII*%7$~Ab(=BcxJ20y)GsX?. y~Vo5p(d2ToDn_[Fe0`BPp۞ u2x\5y _qu,}@5{~aۋJu@'%y*yW*so "u~OKhi[sd,S"[nܒ,UӍ`^Ia-Ʃ1|ߍR'_[uw׏矎[t\{XOpq=6HAV7pln|-o%fh{Ћ  ,̪(YCuoȓ}v0-dŅQmuiaN2qR@mMDž_X_SjOUr+">' ` ;}+v'>ѧ#K:4JK,s8:~ T9!͋nH:зfjK~aXEG ~ (4}|~fnᐠ*į H_O2QdY|>.1+;՜XO%~4yȟZ8:zS`))Akew#Nl4kr0:H鸽Oo\E3@b-%UtXx߱`e,'ߑAW`£z" Z^KjGZ4 lH꥜Ƞٶr)53XVi/1$id)E\ AcD{=raOr?vzȳ]b JBkY< ^>`/$Cc2|AR&eC(ᙸ@NspI,vqY=u(r:t=)JːpUF1WÈRvn|pN]UC9FeV3{>fWE``H$[USx!%K EoVn(]w\w׹g: }v3*9*;mܳ 噙ObfVӎUhq h娣KZfrq x*nywETX59fVʈ~n2CNAƜD>κ}чn-"mng" t$K KFE27nnMMf7ٕ=T!eWsPOңާ_ٔһ) nK 4u üñ uTkSУc24|.yوѪ"BFC Tfڱ{/W7:εC4Z%9W`7zi6\j!_r.iE ga1fZ|lU+7hְb2:"HORFUٔ y㹊Vgnfz7yg,$Bk1NXᓞ5?qeoe/%V51̃0ƌM^h$PFd ŘrAQʰAN2[>a2mVF<|һUąwA!Cu#WvQx#Pc4FIxUEf<xS:~͹#;n_;;:x-G fq%VLd0PW!p!F[ӌGoTgL:|<Ҝi:^<)5={/fjlK$ ppb,b{<ڱgY䯋:5%# iP䓀Ž>;P6V:>׽cUg]QH<ݓԆ G6:[#bN@ H%㪥TԆF/UVP7&{ xO;2 ,Qqv"G`r{<{12j^FQ< _ u<-/Xv5$sjYʬSӫ9aBT&-}2 JGu'd?U(pCtYߧ{snӭG3FE.Dc@IbC}ZO[?jnc sc SpXNJgI1\2rLhgFkj|~_0/dd[V哪3)B>GC;{&콒 \|fs,EgP)^bc'7GE}wxYqtz-H>4O*~Gntפ.ajj2^|#֭v* «q<멎{}{s`x-̗ek'Qp]Źm? ѹF8=ex͑RFI$rQ@.k;mlcv]+KF0 &K`(S!H׽gmV9Q W,<.w|Jqⴝ:#cŃ+]ڶhǂhsWhTbTbG'A^Gm+o\^Rh$vqO2r`HKp{v^9WYտ{ ǂJH8fE 2,0P4MM44MM44M_CW@է+Wo_E*wo`}96o{)72 0ؓ#nMa1.W O"?9_o@LLLDec[',E(pīCkp885b)N`niPe RB*ӹrŴ8UqeH}\Ou컍n2|cH+A8ZAܛ `Omgk7k8YhۤPJ^JG}A%b?G r6ܿ̾3m%֪۠J+ي2M7*Uԁ| !X?_+bb9kM&f/ N~Xے:zx},bSb!Da"\j’)zXC/rzd_Z}$VxF n|ImSO9Q6&ٻk-oN)" l`xsְ} ʤq\fVx#hr/"Iq 7Mѽ5d6$_cHVIwĹuܒ_&2FSo8]SgbkV =ӦCenXlD4dk8l峏~!,O4WD8 azrvFr)6}ׯi caWf^ cnvc0]LMVx'3,R{3〽lFepMwms9,|׿YE3cW")2{ʩmu6lB{5-M{UqM[4WYcIf;P$E@@*swK6* T#~z/*xulݨ6j^ZA'DR,dBT,3uGf|8|dqd1$f7QxvfV?f,J;Inu;}A1iEڳ8'%E\!a_Wtl^gZ!snȐ-XJ4XzF !7 M`$f.,KX/|$?@e1>̪rUYu ;HQytGo'fPO:|UG'd#̇|;sՀ R񸺸Mil4oyD2s/yTFksΌN3,2-LM%yuVRx$0=#y[oc1W$ImOV^ӹG8]M4 4@M4 4@M4 4@M4 4@#}S[o~_Ϗ;}4]z YnbdV= tExӕQʏ񹫘fܘOr9^^W6>in u-|NcBQ)WsPZE/Ol9|xGY([b%!bA5B!K:=G%{/5> tsg<&R yrIcGX|kҾv`^`vR5q̑ú1VrT馚>cpV9Vz}'KB-vJI_2~@'TmIvXfh+@K*-lw#@h{Sbp;5V<Lt16*[CG˫(̫'DOJHG R%Pea+!ve9Hw}]ԱM2,S֑=d)p7!<#;wu&W/b"?-ֳg5&dcVYD+'jz{q+7\ƚՖʭ7U,Za#i糕y}2Xv+pһui}(*4QL'r~Z">[&PU VPIb~]ٸVOT ֍g#4_hH\e,~[-eqPzXG-@d^y/T'$)ziYxn#0$ tp:#JRre08C?gRM((rI< Y+#w/oRV^.HeJ,0:WGTS ;&OJw l>3?Lmi$qa 2IP/jzigq{ۆi$R aej1%tgt!RRYT+)A`ǁOeW f圦.Ju"`I H'i^: )JD܆. i[(-C$fYLkuEÒ꫞flAv.HZKw/-gioʼ8bIeE@4ާٷ*WYsl\b>$d<0n~썿W;>N|JLn/D޽b*yV?,pH fi&x,~5wlv;i`@MI7O#,9-OG_>uɏ6)ne0V%GbA'Q]PWz/ƃHzSޙ ax| Lܚi,a/FR%ܞA?ffkmmcvO%7t<:0a#R xn ܅+fr~)C62HJԁ`DȮp>px׶ ܦ+`_)g-BVq% S$J^Ueea5<[/NSbUC,w&ב+nu)?ٍRlԯ 2K,Jt%^E by^7zAKa\'g1\'\&heQ4kb@N㲱Ԭͭk.*&Ab^+ɐ";Kr0ש^c69Ӌ%gȬl# o?pEiC_dNp⍵{6,2/4q؈r#}{+s{ǛL0:>XR|Oxq?tT+^uuxְ yS 4Gۿ<&W o3['=׊8vJa?iZ{3sf\7YŹ"hBG./InTt,ܔ򕱸QWYԣIVpo_3|kNnYZ; @{Uyz Xub@{DzkQg7W^|NܽmrwD_$땵!~L}sO ~qɸm |NKiv*<La|Ǿ~]m|d%] ,g -&$i^Y%gbc†(;=6m7U=5tejX_? vw%=%AĜXsxLa#t0::Fn=čәqY|u~V,!FOVXEg`yzpzU_~Ngꆞ&Kq ɳ"+Hs’+ݯW, Ujm ƳW5~'8nk{bZ' iTG^:jVS a G:-?y|F"X +vA|X2~f(JyvjS\0U`HG*d6$ Nwɴ(}QYݹ<ꄎ 8Q~W=ۓ j 5QI3'>~>{ݥɛ;V,+VgN`w%mBDr7 > b6|eUSۺXFd^۔4L$7ʩk}H7'r&o+5_-7`s'3rXF#O'=~%[o;4S~r{4qvQ•@}׵=-nM_eWlt62VvuTu0< %\5Í3_ "5vcؑ1 jdzڛ*\g{ǫ)]Vo ?R2QܚKL&Vqޕȥ0v]`7""~w;s&[fWHc4#Y/ʅI%!0zRi-V)Q*;Ck wN eE:QTm\|Q^{,?Ib r#S mJ~Y.{4k2(`F5 SXtao=oMG :z+I,0ĭ)C1.y'v=CۓCYI5#X^@c^$&G?qaPI}29#RE*$CCIȏ?(O:޻+g4`,F]IA3P馚iiiihNWI[=5iU:UNZ6fγKܘL&RY &4D w|G:ޝ L(|&"ωRSQ&W.#MZۯz5+V&>;,G񮭝,ۂJ  ƭc3B8R4^pVM7-HsLqJY%QMr)O8#XNzLVߛtqMjUqۓ!,a%bU7Ќuk#V&!pCcVXJ#/* ;Sg!ɓ|T[U3UjA!DmD IsTur)zOG%5*w{*GfVBxm{4W14RWNPT[BĪ@ u _\F<ւE^"%@LqW5|VX^ɮjYCٵbc]הX4K`$ f]ednxD8'O3?PwfB:͑%[֌K)I76]w#,A ochdv`H؆.rÍFn/Kc|shaizxhSn،0~y ݙ x2v+ Ջ45RgBk ݹ Է|JIՊHe1zkyݓnO?8>ګ^s?Wi*1($q}V۹A{T~IsiW`M'nl|ўxPi &?s9c#^˰C^еB̐]t1uqO֝[44@M4 4@M4 4@M4 4@֥;a:WQME{tܣL]G<ԜSw೶oOn (,k&>ec [p>;nM>hUy:fUzxKiOtXܩ80l\ܱMm@BYR8HP;#s٘uFV{s3KsM 5<&5"!„HU=t2{z۱vmK,P (:EGr$C! ^4Rɔir֣Iֵ/dbkpztu}dakt6+rҵ$VTDB)8&oyn 9ͪ3V%y9Qb5 I\yfoК3YmDajng+$܎4O+]WZ˽(Ib Բɫ'/0n ^ c.djP,b %DԐV]8ⵅxa[NNK L՜@U|> G7.=XAċH=2N^ҫ|';<'H-!$*0ÆXr;]yovз ܂䲣dTưC朕^]GPT[;cyvػ?A_|u}C=>Ix(1xt7bHEl^⫇g' v㟝}8l&cNVWF 8Q تƜ9I +na=039'Az¼8ĉ@ႎJ?A,c6Xß+,w8fӆ'RWdqaHʜnARo-Hwc! "nW~>O=O; J )jP<^¸+!FG=CpAfv]LnVo4~Ow5># Ӱ`4/ #2{b:6,vNRo)wyh /,{<(KZ[y wԋF 1K ZNbJ}>RXB;DyS0؜f9z.0ߞ rSO>Ԗ**u7FTVzU HQ#{7U$qûroF\IyY31icef<+מ8'o-ݓܞq}V2)c&>*"Z>2U bQG,H |^ cܽ%brX٣,tiaVFHV^UM&~rF`jy!EHBc%Uy$8R7?b\6-ؼy,#!xܪ(! LTd2jd[y@"RTN:Ƨ.zuA}./TCW$%L141pЙ@gVYujC}n ;B}]pʒ`I+fD~ݐ1 TkϨ;ٗnMS)@%7PGbNQ$z6gs%Oe\Z(5(W2Kv1cO (ڻdǐZS̱9#Ø9ܿ?^~7\GHkKO:&Wn{L.NWa *A9'Vӽ0͚2ns[hn~~R ^U柝tOb2{VbiN=c0" uu褳n=o:٩oF qQGZX^"Eq¨#ۚ YT-B_gBgWVC㜅pd2s%87dMcmƱax`LWHԕm~wfW%FK+FV\eZIC#B>K n*[{]77X*AK#33<O#,IO7.=XAċH=2No10=,8_(dȴ˙ݛeBxi'{ZObmonm;c^IcJl<_nU^zö{Vx# 3GׅX4Æ>G͏ՏRye25nM_|bUNJ^EN!' dD #D%1nuٻ/3OJ+a-x2 8e:9: [+jm2la_n1ƀ~ãs~O:d~xǟ]= ܜB8r+4G8g%9{[4#緹Z1)H8bT }=^ݹ]oYes$Hf$I$7s7.&LVg% &ɕ)AMaDYtEg 1%qW}gb`XS=tc"y|}P/P!{wWu_r`YvUiR–+ 8$fI- *=25KR4-{GT*L VBj֧=ieR xn՝xኝeD`Y:'ꈣ >9$շGYxۙŠU:X&iTuWweKYo% +%W9VwMvlTrI&.w+>%v'A+(l _Xa72JHtXKfIS^UulٲSaG jԗ^Wxw 8cFYfjeUmnJmc9 2ư ]}7wvŻ/Zj9:0TfHd4%?O!g1u2wkm׽Y4~Dđ<^PAԽ CZS^NI{oˎՀAbE57nr=ZuZ>PS"*Ha׆݁'=J;vv M9(ꕯ`𩌈A V0UB>ݳIiDO:d+~*?KqJTgnEte=KS$|Lq6,şSK`$ f]ednxD8'O!f6* B梡=d mq~F8b-<ݔ{ǫOsbWs!v=z$Bvd=7@:&[tbrԾ+ x:T%^F)RX~uїsd8ع%m**F,Ǖ8jCm',OA֥l;)ׄ,QDdR0@gqo&B+(Re}9xwЀYQyvRm$8̶WZ-ZE]ȝaDݩy)9Rc 9fK,+LXݏ 5V"n3\:<֞/u^"VLqqHE5eܱzcݑm# <b]:HYz,8#I: 7l!V\⒕ɪT_6AUk RK3NG,* _{{kɧee25B\J'<:+=}$ذW{E^.B5ezp'8KsE= N6*!㏭sr7ԛkg|7k1.eM*q&8u/.ܲ.˾%#1-!]_wDn8d[ hZߗ056mj7m 3Hlԝ!33ш/nOxgQ;kdRUlL|G X*Rf~Q7 а3;ud3YnR5מ:+4!>x@x[wntd2Ԟ\%w*Y*HD>G oxFmqc{Y["9:/hۛ9ؘhإZ,]2~1(H@۠i~;l9k%~lYI},đ7:Ǽw|{mΦjt͑\̊(Vb8U~6˹xry)w ~-K~ڮDI dK {GV]KwFW[scvH? RM44]v.BJ8<+ WFh izu3EBI)2̑/S pihu5gv *@׽*Z%bhT* ?  8MMsܩj VeIc($@2?buiJ=n)bB{2%A ޯۂ+..A)@u4ihjk2 ܔҔ1,F?y^ sxK2aJO{+TWXa)Es,}2]@!y9]4w;_e dj.9cb A#h:Zih>'9__'UoCW@է+Wo)W™{. n<;~rR0J=YIn{݀'30=9xڛwnR޵627+BHR; z n俆I6ZjӒTY"9G7^H$fT)e ˎ;/H!ڧmrKYQXC9$d%qƃX\FKqTj2Ҋi^Lj5W/D%=[sLDCnح':ZW QbbcX9_vf,Hܛ !N#| tt`AQx#Adnf3roX͉㼎řI'AFoCș1yX:ּ/^yJU`o`;p1DžLXױ_v}ԫIdi@ũ{)=I9 m˓|:8lּ<+Eb4o2p[,5۽`k!pѰxcDs3JהKHWRxDGrY\iEGs 58x|Pf5NbpTF\<`(AzA8(YЬ'+J={4 Y F K3Z[^%ygxpYT^>GY6 #i.x\qrg)IHY*R +)}PEGl|mɧt2V2GX(Lk$ZȈ)Gh4ùr6?I[ o%XxjB%X$ 9`oUΤVnjkA6[RSݸ_J=߷+?uf +לf;ǂĺND`,X@I!$iiiioL)\l}ͅQM%ū4ctbx1[!ukm팾⯑:E-!đ##v"0Պr;nKP5:L Z~mI%rEnŶs; 9ͩI7Xuݥ *Ac| 8jKQ|;Y9gi<13 &>[ƭD͋nH:зfjK~aXEG ?:KW@g㺱t0X\>\/sxv?g7k+Q+Rc3#X/Cix+.RH_?hd?RΉzj9ԑ͚h-lv(D<]#O DGf&n9%,Iܹr㣭hS7L5I%5|92E˂Y wr$S-.OoedcqZ<Ѿn:[w&f';/Sn9]j[֦Fev]JGtdR @]h`v iqWj૔l%z7a)[1\%Doe~z?;i16_RpISkX{on!gHf$wR>*NԱc%ZBeYWbw5"yY~1F,Tmc)!zV%~09 |67 Z0-ScZsXH_?-'Rr)^=d:8<3w\n: :ձ ,Y#͈PR :~ fcu&7#&DƓ5 ܀  ;/$vn9Ys[+o|C`Xƥ AJ}^5nlmU.Y&ΊK`".62CF(dp?8ޏY(ӰzRHn>Xx 5g[O%=* 4@C0cHןz`9`k/cn?k1زČ92JSڿ(\1mYW;wV`{qZ_=ڰޚ1*?TWٸQwtdr3 6߭&63yس*Ǽ/P ;secǁχ˥DYeqwDRwnbͷ,ߘyQ;JK,=޷UW m \E 3Zxj"X01* PuQ_kdR+Hi",Eb7I* b'T .u20x&{s7*Hk=&jp۸* 9%[%,[oRYVcOIWEܲr~zSӗ-=J폅C dqѺ$l=' Uڻ K}c7ҦjD̝~XH~@~ տ8MK׫]>@$xEO!x#fuGOMcj ~c9,YI (uq'TR/*uq.;f>*?{ ,`*$܅  լS;pc2)ӦgVZBO2$|0ApJpynBp.S/^XWN(n*G2ʅZ:n{11xaܔjTLUizŔ=WI]U+*:B+S-.OoedcqZ<Ѿn:]w58޹p Q^$,1M<u8ڶ7K4n [8"! z,B#ؚ"x BǞkڙZ .+ӂ2S$ٺ '|ثYu,G&͛` C, YgѰUUH,Ck<&du826+`+̑wuu2 /^5ݛ~\ܐun`r±4<x$p{|s7cM,N"dޛHj&3;\VO"(|&:Mϲ۸&Ry p#c4"̾UU~dnmI0R|uOk ` B,K%OAn>>խ_"oS'؝0V b tNKy=6lTcGچGTO$ NSicf-6X,Ю,ҬrDQ;|rxBuZt/e}q]_(#.ՊEe>:m,~kYcd- M "T"3^^8a; 2Q^Ś*ї-yG+v޿};c1fc a3"Lt `/HsLuA޻s }M^QCmˠ+f~L1rc!:@1VEb[8 ,`"d2n\ngd+CIV-$Fsxy!t~G=xj{scIinlmzW4T*5(e呬7>x;dmo]ԗ#FLD1}Ε$9^@Ra׀ThJ-,ៃLUNORJ7ԲǻY,uZU:TÈkfs˻,ĒAp~}ӝ[Pk9$0Yyd,|9&ql%H&eg!#V*̤#vljbfhIC1}P0Bs3pE2µ䴓J2TFuu ')RdiUJsجe~>ـ>G53[o>۞Z62\iD NuXzDuVh4[;}28̤I%FR֌ghTlT`.l|m䶾?#5=UDLHO* ґqZkvd-ɷ`SK6f9'J- ^%0kd*+zwoQ*KVd%9D ˡⴤU8Oن?Llu^ t{-V(Qhه Umw"3gc]WYX|2A > t4 4Ae<9L&N2Ve*zG*H<#[+xgr_ v鉫dgq%z\s I$C!$) G) yiP=ӨeO60ܷIfWF.k;6Jz͏3qp9` yJ1]5&y"bfGqv +яC]Vݯ}*㯊\!^KX$ki ~;0eŶ[p YuGi9VefPz"7 ~A lʼn**rR]azvT*>Gu {z6;'Z&І92Nj@U7&vK'o5bzYjٰ/%jDh=ܦ='d bWHd-w*FHオA:5_Xum<4s+ʫR֮x1$r?ZGnM7DY݁ "F4[.V̮?sǶ &Y xߞDCXVꥺSlF:MKQD5ˏ޼cӏM.3qǎY_)-|\$Gcʿ~+MOXڙ2ȱXO ]&R WDVPǐhac,r~p>xVwoVYNݻe;r~{|k;?N3ۂ흵૷#I;W8`2 kR+瑉)͌mËcw7^?'{A<tUSZ܂Ԑ2c<,[]ջw6gj콷ߵNd./$F{^ ZfZ`h"VIw1{ `p#ՌHE,àڻ|#`ۙqI%) vN@BF^y#2x,2+,6F[=vWꍘ|~A'x ^XU\ĸ4CE&Rܖ|f1Y-|(Muh2Ÿ:|Ii yRH#v`7&zUU03eAaW ,!uts[C(JSC2Ju*:Gé#A BOC=mɳc%Xr U& +ՈwsyXt^[wgH!Nx9?|ѩxOn K)?3r^< UÚ|. 6!-V#A5=n!8-?>n57D늩8hbΒ^^9|$1yו~DO;Ό \n%q2uQ B=L9> ?TY擨 ~X?S'e,M!>JȜ42r̡}D#dKkr$^f2䪲C Qdg:1y"=*37.ӣHCZJ("a F72HGucA[UK6֪׻Kie"|صoLc"V a@n@@Ib@zG$YOP2u`Gim7y%lBcRܑ@k.mn8s/ dbcc?mI[{YTjC; 6ژld^u2T"+-vHiQ2+o'WYonep_q2p[G׳/ ǐ8թP4mPdnWՐ3}/n8 ;Lsؙ*㢸Ǭ[ʪ@ @GtK+4 a2;Kp_-ܮebݼi%aovw ce Y3d Zo*LYS]V%Uq  cn9*ky<;nT؊`tO'HCv<>4Y,d^f\TaL|cG2(\*)FtU\ܹG[){g7՚TI"Eap%]gegW=f9g4uu1zc=snڕgzS*:b68ԯInÉYo>N%dqumxַE*r9G\,o?i 2T<Ψ>B@AȘ[>zVKURULiVge)*KxXzQݡ ci 2_wxyft6vv6V|\4h&ׯ\5z?;M۪^ߧFh*Dts Iӂ |]CqԽrj*.ήĥ%f#Gwnq e[zxwIZ8R@mH7^|7;BZRny8_7!S5_XV H܇xYZz-AOs]Fl; {F;12Xzl^IJ0SG4+(eHыE! Lb5Ǻ7LRJ5f-J*(IBBTƂ5$8UATӂs$$R% Vw޺?J3,QpP8WR3`afH<[ i U$y9/3K;幍{jԣYP$uG]]'ab9<'UKn<6 kO=&DY"yÐ΢t 4@[)SޘG YjcTI/?#9e_ug%$"<½cr^FUPM=60mŸc(UY䕜GVVSه 8?? smv9U,cqX.cI%pʤ: Ժ[,m ?W ]Xsn4a+ye~G]dng/axyR$RӦ_UG s%gIFKn2!r<D&۸c38% vjW9B7ퟵi泒vi*ĦyTO_Ȇk&AP\;έ떹졯\d`b('Hd $*'},0T6_< &RKrVyeGOl7ְtfyPTݸZm\*Kc▍{ yjL^bBIfoMYW:JņJS(A'H vNBv^Gԯ~^o,ﶣ* ^*M *7 ʡBS]ѷX e3Ix%sDQJ Y ~p`z9ڳ椏#}J*ӟS45#&إz4+e+LWx[ns*{e](ǘ'ly "ۖX#O |=M4 4@M4 4@M4 ^llFstc0q~gFt+N^D-ۃCFl-܏o/vw$Txզ"HT1rY9-!1٘BZDxkOuRZ51uFj[3=Nь(ݒ> 2!i$fWݯ)eX^O(^H#DY{yQ^W|)W:/fhaV#Owgzr8kJ{,VwV/¡ wFLbHD?H:]yl;? V0[Ec1*-=p|1C= e*C$Ṉ)<!A$|h8tջpl<;Lm `]Ɗn%xIJ ۓʕy_jiiiiiiiiiiiii[7[IqY`V@r:r1E)<}gHڻ!b.c1 zkyV*iPIBZ dVY);:.gfT@$vs %T}已82aW(zޫ8r#0FZ1 / |˵=-wVWnܱRJ}Ua;ʢDqT,$c}3n,vWolG9Ey! 3ΠEń1PŘh._bYR ᕍw# H/bݘȧn\x<ɿ }x?~O^sI˳7͝GqKYa$߉jC%5[rk/RQ֙jM+2#w@7ز>@u4[zplW|9 "V,.TVcNi| ΈREuP һN|TJ/&нEf:#6#y* 86/@1T%*$PkKӁ C\lWʙ<>|c/կlN`3I>ɭjm撻%SRi$9Ķ@=^>ėkgg(ET>@?G=@v'y)ؽWqNo*1~ʂY9*x` v(nϹ l]?8 : f yaLnR>gO2to(`7ܷ69_6"Y]$EH WbO\^ ̸2iwI&&O$,ǃ.^hp^:|j&K7Q^'Z L,%L~oH\W< 6ϔޔ1Ǵ $ [R~!^:F|Nޘ^Xe݊,q1 _AR̻vϸg{ ʱp̾Ff*q+a*JZc Aw'#>#ٹpb>bx1xMueEY$ WnSdW gpXjj^Y>/#ЪÔ;}z!`4ɦԒ̪EA/(!K'BǸ7F߱r3A^+dS3LI+E`jzKMы,crT`!Nc/#ĮU]ȧڭ0Y-y)䖷y"f);,3#U? ѠK6`&ONWW0h$ eG)^x#F ksY6'|!%;~)^YC`+:K!AvIl&**$=QV'YYQy' rO۝Y6&.팎3iʲXMcPZ ~EqJ>tHбrrTctִW1Z lFW=Pn zoJY9:@,:,$Ebuefn{'^ml#^2Ԓ59ZYώjL%#oKmM;W'u ًi%dd6W$nVɒƟRpyh$c y' \*t /ų6jm*0nhrۚ:v%Jx$BوB XԿǨRZl*KUrPpצY=r$Lyy潊ٱ簙;RUB<,VZ#k7-ÐS.LvGrIT=ssm엪X\Pn/Ǐ"Y/Ga]㍣.6\x')Л*2?;Cjk7B8.If;> zαE,Ry%QScGPlWY@Vf@y_>~绶6:3?yXXKUQߕx{h.M>Ա-ZpdV_3s|E-rd_VuIowxWn\R8Ǎ GtjlkmJƒE$/AGa$%ʤu##d噢5cyQ+20E96hw .ajkX;zH\8ൖzןVkXfΦJv2,x,D/WHcV)1#ۣj6*%>Թ.IMf/?@"@W=+e)f1ؙqA 1LT]V ]2oc -fpcX}9h-;B .^Ju}Jt3D@Өe;IP2ˁm܈(hhHّT#731u-QVYeRպ=o;2znjxm5~Z6שdy╖Ƿ4*cF#+ԷT<6)C/Wqm"Y~簐|:x5z8sX:V$=iw$" Է߬XY&Oof%:ϹDHrI*H d/k ]8ͳasCdD+x͉Z6;BvՁgFA Lw!fmiќ7Z5H\xxvJ0x ֔B0/;ےLr/T>@ G9XD6-'>XP󏡗tK6ClSЖlD,A4ֲ#PQX?AC5!ir1M/YH8`Hr@>;uհW%4rC-a[WyS?GޛC]y6qDU]dV'xU$qquߎ8X+In4l `Ojq6>){"I/Pl@8ic 3֟?Rr-Vo7Ȳ/ xe%X|} CW@է+Wo_E*oTV?jml{+-{pK^)'{f*@<` Y\Iؙ)X2k֬r:O~8 ӊv6Wm.ZlZZ Z[ )M`8=m v㷹v1=4f :C,8FQ[[fInTZv^Wn z9~7:4Y.MWgG@'{jakn-||}eIm~:zS]kGU0HA'4Ǧy{կ vJViSjWe^^ʫݺ`H#LOKvQnNKiԒcUHIDnw3a~ww1id8$CH{-gcn\.fLr^[Y)+ ™#r4 SےuJ1F'ݘksӵav~+h$'hS'F[piasٌ>>/C^Y,Gqܻ5sV#?`HRr=ŹfAUV,8 3p9okryGw,-5-UI^OV"9<~N 4A`;fxd(K4g䏤J'H_У)u N۷7 a(ڥVffɚ܅"D 'r鍸9|jK{ީ̙ t:y/;9;tx%OWRA?Oxl;/gpblGF?j:Aҹէ,"Br>Vڸȓ'6>݉{,JKWS͚Kf=vc*+~ eD"{Ug.Ϸk`^ `ZS*I2Y${ g_,|/ҼLvRI*v:IZZi u^~s)>7\hc˷iѣ5e2C0 Kr:+1CekcZk/PGa~r m߲z"S. _2thEā XR@HJ3/ǓMvbI4.Nx+Q(6&{[nfJK~%YyUi"$&B#) G$[vǵ8#?%/ $@:˽VOrY01Yɓ%(F}+Tw#N޾ϰqo܊,T1xG4ׅ)N%?:=dQ4Y:1:r`Y;;M44MW?IW UnQlV{{gbקX۷r}S5p;{y{۩C"bի>Sd 9AF̣MV"0"珆;7U0OTf!Ju{[27glFүQPվiBud aNWHTDv%MnWh,AvIW>9VOL5 . bG!S9Pi@G 4Qd<d٘ 7g{ʑvkSë j!>>]ϴvvb^E$q$<׹Ub>bx Vum[llZC]z%"ujD Tߛ,~NW|^Ca[pKQRnH?m(pYhihihihihihihiev3J5`%#O%~8~mvNnrHVN6v[rʽz% }FAqƍ:$E,nΠsԟ͙X;34"^mf5[uG#@p ~;ڞҳrsqN;bgW=íۆh XÄrBv.b7u I𵼕AB,0ZL,2KܡdU ty~s9&ѫF%(VEy[s6աE,7,H DGH4kÓU!ubӜF/i.ldc|{+,t:]. PH6.8: Bݙ/ubiy,HX7e]]Ȥx,dI8GBŒ{X^#qSxzC7% :(qkCLau<Շ2uklǺ9mk'SN XF;Do'S!WY\Iؙ)X2k֬r:O~8uz^k1*XӅfu6!_5C)-hc˷iѣ5e2C0 Kr1kc&F,UTvA1חn9FeAmԭw&-+g ^b)"c'I [W pt {_0gÍ|vKڡzaY75h;qܻvў3XY!X#(-3*E+̆g'\M麱fl U0\35;MmaynJ{)7:IiO],FJW, JdbNӜk-FK#XfXG d ʈ1VaCu짽C f*z+wRG IO<,,x=+}ɒ%ܹJ$(B/ h솊En8$.+_֎ڃ 51ۑ]Rvb9_ JhVoZ#*׈8!0nT(]xu)VinLglؿC8%K>9v⏎Á#" >d-vk9,Q*'VG]S($-OURL;'F dgw,Y nǧy6Vù*dU=gEzyd?+?I~Xlzufߏp2ł+YL~*kڜMF#,c Px`o]kj_5~=𖡒$!Ĩ38QBmzNC"`Z9<;-NvL.I"^tr9ZD38(w\' s_T6OxmzZJ3E^F#JKIfUess PȈ*BL(+!%upJ{r:{; k] pCOZJYd6 $R[ oF!zCŅЊԲ9x4ߠH؈g-&Nr сSA1s8(gln7VV[ʠіĜ`ƴ6#!7PGjtmj#P,YNg޽.SP7$y x$wfn@U?:ٞ7EV)Yo(IjĞ;A^&HەPś!IAqzM\WV,qb!zFe6UR_u +g2mNչ됂tݤ9 JӯynhomVb"&,R , YVv#O, ;k+Ykɖ5:ӿs\:meAhG C$@%\دUo}̟ب2hXLFD9zd%0Y{)k6U6yձڗ%FgH+}16dX~U^~G:qgXvГM>8_(X;Wp;+/NZkRʈeC !8nA'Yc_znݣWmqpkhk"4A%f?[|(OY0skqOYX~J+̓R5 AtsbG~#F^$@0SH΂GViŦ#g)XeU<[q!,I ";WtS #2.y]fi8,Xs[ӝ푹omB촤f꟤`ά{gz_Aj,j2Q䢟3TQk@K4Y˗lNWpIzA VwH1(=>_S;KۛVI,8_$׍?K<-A FLnf࿅Cj3-Or,C,qVg0>2ц)j fߣ66hiVc2$UCW~|nEnfL#w sUyCT)e%xyݍ L&{B9`k+ߊddUcVAbA<|c ;k/%횹 sU=x gN^[WmzkDx?2)xxY<,I/ rytᯈBRUb+^Ei _(x_I'Adަ휯l.Z/({Xok/ś$*[㥃xzׂrM=M[7v!ebG+' Ze!Mk9EeRv|,lI@ '/Nr{3(q&_i`*nA^G:ko v:܍f,AbǷV`5o&#|Q2YzYgjܦ^G",I"P$(^uQvm{-Z.׭nNjGy\j j;1BxႱ yW4z6orbF+35Y+]ܘ`Bc{<F=H-,NIWW_mՄq11BDD1-]JI$a ́@?$%/z2x vWh'( uVb#+Wo/czOX@8Q_?8{=}yzvU;oq͊>,װS9SRc ^OqpX؂E8,qFxTEQ'Q:ii n/|Iw-4 GiK1|mX~$ƹߵbԳ_tjKs*GjH<; -'}ݩwRbrGSZw.XGjn#콉𥳐ݗq_O~ yiE}2G H;a:]A +*RSg"03a.8UN%pP~ l],eMX-&-)RX{$l,}YX^ T11OXMV'G?,y=1[ͩ"YxRaIVVyKJUP!Az&+lSզL笪D4A켂(U]Ý_1&5vvb~8xyX+X[eRz8.3pcaf<| 49^uA$Z8E{hޚ2qet qVXa1Z$S+$b\O: &WSqF=z3;W5f,ԞX[Z2u:g}kd^N|*ӯ}[`֥l^:f>RшD7s ,'7]=m67'qoG|r-~JGi_=]>yh<vcoY2^Ы%Idn5% tIV + ƻ7=HT,D`ՙ"g3PI @߂I'?Ai[pM,ymߣfYx*G:幒Cz}vi,& NᏕ>2&uE {ghihŏc2xL"|"$U G4=r$YTx:jM|FFcRyp+U,-9kP:4~9.ȑ\p9)e&Zri٥xk@M4 4@MX46ӑ$pҭ4CA twc8?魗;ػaUWltEjuʎGYhf.8W,5 }=m*U--j2Sc0Qx|\cPaZkXb[gMj|-[78*h䊼ou⫀1"0F U[;su^oRץnG'Y#S$LH ڶٻWb&*%J)eZfwhH8rw 0ޡlfl÷xSo;mۓ+ZhQd?wEej2gwܛb#)(kmb8(٘T5 ox6m|FC`X`K!O'XpcpV9Vz}'KB-vJI_2~@'A[~D㱇ik&,-kK |t=3Kjn<.jRzXE?h#a^~-Sbp;5V<Lt16*[CG˫(̫'DOJHG R%Pea+!vezb6ц9.nױ_*%H)%2R&x&AujGߎOw,B8e+v-hҧ;Gry,%|i? Yly>Y~O^j\Sqfj%^5|#yxSɎAV_5[n` #S8ӷ_#Hv J=DM_#{+~x. K87}9cCnTvJƔ*zAQ)<|u5SqlG~%Aa{Jb9E)yPPܐ-[{3ufmqf,x&x#j8P!UgS-Yl;vOma$/Q>y;}kǟC'%\细&C6H8Z0fvg`g$ u=4=B|Sf03Ko)D,c /ۘk{;y[c|g||59L\E<<+NuWEӏ^jՒgsMtrq(`xq9"&-rc-(8/WS3 +̒1u 8t}OىnT٬+L9)<|I"rx`'>9;~v|^*zU,~XP@MYG$h,Rhs|{ɐ1ʶ*E,ϐ/RF Uչhnټ7 'gM}e%. /y;+NK/cc'68.Xs~؏\Tg-K_%g_vJci<6{I JVlNKkW& QP b)4=wx+P<*x1G;s̈́l{frYSm$WbWIBFPW Nr-by֛5GO/i*B&Iey>: vmܞÞS#7 HݕChY k~W H!%IҬit{v'a^i{73T{ H4#}T2 pKq;s;`ѯJC1 z׆HJ c Iinrx[z3Yl-lpW^Q9YOiQIv SPUB>qo$}jM#гV[:ʏa<[p%rKu5v.{ rY C tAqBrā{( Xn'''b22AbH\gxD9B/*P/B, 41{wq.z4ުKZkB)W`933#&ݳS4Uqf66iҷ3԰/#rX4%{vK$l6-ma?Q ÕwE k_M2;VO~n=1GYHHc-|Q'\2m+ܛoWop{ݵ䨒5FDRiD@$GUq[u zz-1&=DB;}>$_1P˽pQM|J/OwG>R!!RG/*OS s F/ign (#C*DBG*~Ku7ͺů3a ǎB|x'\k-}ոBm$BDT-o'߃"72_R%,0q qYk32›*(=x,[]C396=# K%tz|rE>Hs#iSǵC&kW#ycv%TG,+sXq\iO"<RH^&WUnc*IQ< .lFߚ7ZߣvNH} 'IIvs 58|l\ 1aKJQbE PO饟PU͖7^ SjLX"$w#UQv_ VQ uB [Oy+M1VA~%31IO:VIVSЭa|c?k{z[mݸR" ZWW"(ׂs>ێO6B OlZ/YYՋ:.Х3I hfr5 /bw\>;[l͈Mdq j1QQ@j&Y9$bW(9PsoVqȕ ?˓*d]TF7iw[{xgX9&,H岶T$I#(Ay_M=)73}jFKh0J!dvBA%BL8?\vvg#f=X-a|fZl: hzwCrk4֭ w򼹒_m6;nS4nYNF1HFBOE-{)d *GQ)Q_dVrGV#n_c "V WkzɒY*M{#vٯW-yL2IX 5ٹDg2#fc8!I*>I9 ^U򔢛9frqf90t:ye7t=6 -WcQ|񎪊Kqӝ OH.*˛ZeOy9]R?x,7C*x29 7IȳontI˷:jEOq\{+Om3w_9u? yM{Sԛ"zOkG^ "-D00UsN~G'l滛:yʉ6s\aluLХ!Hc`Ǘ Ƹ7}ϐܭ4q}#ȉ$YՀR'?<{ٿ/MyځH!y&EyqRORUt rK|9OZOtIn{}JtrJ6TV2\f_ "YLe\)Ƥ:yOί[+1 eKqWYKj<@,P[k䈹fV߫/e$jM_WAnJ4 VSuoзSlF5"MfI2b0ܕP:揫רS +|{ʉg C#Rۏʎ]~ O|p ^L$ETcՇ]x'OQ& 1u3c5ZwI̲;/]I8f+h,swK6* T#~z/*xulݨ6j^ZA'DR,/ 5]>R{T\ɐXfZq@~ŹU!M`$f.,KX/|$?@e1>̪rUYu ;HQytGo'fPO:u͡sǧKxC,x5j=o)yWȢ1=T imՉtcKx݁&PJ<~;o-"c $F'}d1H<rʰčjޝ6dq;XϏbbkXʢG{u*~:,n#M 풟rlG jFKױhO!nkq\,iүNND+ hC3^ŘK1$$u iivbeD{ ltIaM pxo8xi], HNd=e =ަk@,^G) &O;* 㺿VbWuGAl䧅;m(ߖP+2R@ubRJafkx۶ 34ʓA*ԆVh/Z;Mm\"y[V4O ey1"uBFu7T41aXLeX)c_^I K$8p{M`n.[]fCdZE,2C2h$|~u;rlMv1[24S-t)eHE1.fiiiiijO f׎3EiX2YQlC`>y#5{O郛]W=b1G VV h[_շRWr,|AGOY(E b,Hg ؇@o &XՖQ0 FAvG$yll~g{s~ gb:xqv=Sɯ;3en ^]Zx骥C |@CYׯ <=,dU7)p4-$ zGϏG`r@lVcЛ1vV~ʓCc2xA͛/&\f|7BA9(ҷF'nRre08C?gRM((rI< Y+#w/oRV^.HeJ,0:WGTSoM,~bvȵ?vrW Y uYXJtC4Ғ[yV+a,(R@~Aݧq9q3T0am Y"e ?&2pÐ܅#+)ەɆYzgS<5T^$ 3vI_msic%w%f|Gx)}1pdU{s#UҁcI*$LҴp7?YJWlb'1uCNAj#2cX/NPU\3b vrB[yk;K~U`K**'VߵOnO]>JVxdzQ]Y>F9,իm2~nw򘨫Z),ala𢪲a9ewlv;i`@MI7O#,9-OG_>u#<̝`1︎9irG#yV/ʑ,_Txr^U%[ bBcT-6$ *T(Y CQz|HA˴Qܑd9_%YT7 yAޡԟz奧g0vc5[PMydU+:IvL0#P۫K%ԌBC\ʫ0z |ظM>n=2Pr"&`uUO*9_WoAdo>5Gqd# s1x,F[BPOʱMQ4짷ʝHwNlq-Zdū5*arW*Ɯƭ}mcM3ɖHR8ᨶ1̝f\P>­W2[!Zd0 µ?) 7a;d>5b鵋k{#=HdYTeMv@̌x?u8eykԎVO/<*v2Af㟍;%~ʟo Wkd^4GbYe`#( !ʷ%Dg,\0b . 0d>py =R7J*8z`I=j4N-+fcݹȼ }x39=.2]˟#4'k^HU>^L]}*2Jk㑙#݇tbZJ٩[U1tZ1)L1e̱!s%Y#Kr@4< VsnA]o&JUy!2S]b5Gܙ xFQry6 NIhRٽZ)5knY1!A, ;+_[w|L 1,ZVw# $lv\dVxZ%*,~shW@9k w,R~֯ک2{J<3ˍ|2Œ{D<4`*'=WcvNm.jբ[O(UH>Ux'c ^ݵ/) Vx35JJ<́M>yN7O7V2^j⨶T eN ?ݧf6n |k2rRҲ?pb+E籞mM~I`ud!1ʮJWR~onu,BOpdyWq@8U21s+pu;+enb ^FRƬ1\&dTy {+l/n;MOw۟4}cyᾱƂCǃTYǺxe_??^XqcgەC?ڳmcΑ"&5Wr|[۴_mrLBj/|EuR8f^N/7%cjdf9.fKbc1HA,GҤ/p瞭 ۓQGH_4R#Iߟ+Ox췃zpe[-MR9U$d H_HpGά;;V\N7 DZ(- ij5s  m%sCm飣9lVRå@DH.ï!rڠs*t=5_5zY?vgᴔVͶTž0p HAPk{[d[{zf_)ʒV5Ka"Z2Y1,p@`;9SZqTz؜/:@ 玠VN8[yMoMbqQ*BKE,#"2N 8ogm6\KK0ӭ=pk2WFExO1A/fV`{fl7xssUp.؞a# ~'fߟO*67ZoPMr mYFMw$,S^շwub08\Tk0YNr;~[K㯺kIn6L}]d&VuПn>>DwWu_r`YvUiR–+ 8$f ݳnUlF+3F,1yb-xq=Hvu.RVseyboy#):dnWk/0G6~34؆8S~#H$,>uٟyD"Y'Un$.?'wpdǎ4~-݅OhENWIs܉XVYOk2-x: Cr!7pdY .AV0@2y%?in*3s7"Fi {2׋奉k>d&8b3᜵K`B0YI%q<, PcA>e7n1֍1cb?w~8UٸQλ^ACh]T2GLAmN/܈Q2p}R9[`s!}^LVJVnd.XV9UṖfRz۫+V[Ĭ Z)TV +Ձ^[v+Y$KVaR*jgٜK3Xum pl|>^NZ{pGxcx^E/%H<w]ſwLPIxB-gDkEqAGտ8MK׫]>@$xEO!x#mڵZ6Z-O1$2Uر` LO*p~\8tdf].=Pۯ0#[TBIk~yCߡ{i+jӕEuV?Om/E ZrvNpͷwٜcj޶2U6DK#/HpZyOq;pYI5N?[g1-p8[פG|"~#jHF?POڢnݩq~ͮHW ʒXTJ[h’YR(qpu\u.j0<եY@VB>$cRuڳ>ciGZc2ACR. I1*I;}֧c%؃%rݵ0/wRP o ŽZ; [Z| gOc5MVmj8pۗZ\ [A;,4kjP8JFV xbb;r3e$eNK* 5GUf޸k>ߚvB\ LP eePHW@@枮m^"^c, a3αxnݏ$馚ij͊ߛ-Z>~՗%8:҉LF@ @$kE;L جIXhX؍jb읻C'!S-ܯB[ vGTfP@'60| 5QHh+]`GXēs[pmʳUہ!A/Ic  #xiվ?W^L ]i+A6JڻM3AGmQcR,YCnͫ㐑 WHP ͠_k h[ \s#Q<<87-ͯڱWƨEhWD$o0_#J1UMzG&H2๎gk{W#Oِz9vzsn݅8pK^Ye~Y}07e\c!|`Wbt*RH"/@EۊNEmM=ǬQ`~Rgicd#awqѥՌ3H璤d0~:K!RAYYVBpr99]{-P=զn MI"u<2`AFX(o$d` 5)ޱˋʏ,]$mmzwmxnّJ 9-1''>y2w8\"&VeJ+!P֝MK5<,qTеk&ӗSOʦvۃ՜U]TI{Y/{Z1$R$sEx!v')t֭ޱqσ3ܦe>yCSX7{xvR^۸zގcwT8F#y'3XZ ۟GP`;'i3x6֦bj# oVtdtuSO*~4nmR5L^êdU*C+}:7-ذaO#&g#$xj8_: \<79̌ x_x1vg"_go(x"Gӽ5ݙݷq2ۂՕLU GCL~i\{ݻ|2MR8;XHBݘmOEeX۞9,6s7k-_Zhᆾ6ԭ ٝO,YJoz6 [6J^5G ]Z˰,?!ڛ%})'fZ TסGT. ǎ_-J6AnhŽZXVUqp'p<.{j= 1.OS#CDߴ"&~HW0|6ߪ JHםQ$sIߙ?h3~ﻙ{kݼ<ء^^EĒF2"" Vuyl>/'-sK)KpR)պ V"~/ ksbHuju# j;+{XZR7VgsK fhX؞o$. ~ߨ#ǷH<8Zzı5LUB Tpy_TKZhrk^7J/<Ƽ{dڑnӴJ^;*KʲH*ܖ "s%kq/LRg5&K j4l7!#}R*$2|q5Jn\;x "ʑXoTK6IAĉ;C)}2q>QKfzp̥F讅cd  kQ7|9 Ġ|׿sQe6X] ',xh‘jGd7vnIp1DE{N[ՄƪDi7tV? =tl΢O￷Y h4F[EA;U,P$G56,+Á`Cu ggl˷&BJeOď(O#1'^X =ßD6er5Վlu "5 OI2)ic)l~U|6Mqř3N]QxPb'vz?O ddٚz C$JRXٌ$D_u\E̵,魚fCZ$c #IFR዆,>:s; hr, % ۃ4,Yגra+ |`=9uZQÒ(%hZCf4f>eQ9 K7ir^:LmvJSGH<:{OL^~-~Z5QW'0=HՂ=}Oa$x4K4HW[wUS{?}vXg5mfR%:1#c؞G>OfBkTNAF#ɰߖ/g A&imvVj=cFGȬq]8>8| |p;2lͯڸĬdo2?s:sՎT`TfOKܖz[ pM4qcI"RxQS!'j㛕3 %x(@R4O'Z.wo/H]ciZȽF'FsZHu~y͓lwnؑ16s~s4RگVIb+=y y tTd qXxm\H? 8S `$|\{1Od&jz֖U 4mY~S;y6ly%$9lJ$ QߖnAJOL.^>LJZ;2DrRk6գab@ G (zn穟1Hry;fiH2uE4+xS pnQq^$3ѳHYOEܯ?y]ڳ/1S,('^9$QqG$xMڞCk 6cl}ՅADj[G=ynK SznW90vN9D$ry<\לZ)*neqP$NxΆ:8ӦKsgѧrGww5FDf! > +{w||ɍEi*٩ X$첣 +)ÐHx}͓A<7)- `Pµ88BD<y Λ;;}cZ%{ `c&ctX9ZUIgZ3iGKvMf"km%_ق@%L!` 6uba(⎵=;KxnB9+RlE4{-:PՈpGXUEry'I֘mCsˑS9m}vxX9%6$Qft/efG R#H ՜[  n9!=5iU:z'9__'QJ|55d2!k#!E$S2AP o>o$dȸie~y#<5l&b18)TUt9o$dȸie~y#<5WfYY̫p!v EeQU@mڹ1ާIMX-q ` =xsȂAf2LeyKײ.nŇfa܎?]y^ʝ՝C!%Y(P?n]xP8$PZh/yjy39 .bHR[(W+܇*W, =)m۔~୅hdJ$亘uݛl&Nԟ|G|xӁ:Zis30f2urX` IEĪTFG_ƹuf2)ܹWQݘH ]4 ko79&CNy=KW'K|J/uC#pyiO5bA$ӭy\q4`'|JoI G]kUdsU u_qijklnյgr氞篸:yۣvn9r^tI)zs'vF%-ZE(Udf$dkn[49B.؅PO߀?V4I8s?On^yp9[s^Ln${HXʦG! 3M͹-*emn VԷ$i`UG'\[=7g# N;9'ݨ4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@= v^3UZU ᐤ:Uʰ G#\h;8VB27 nد+G$mՔMm0r>J앴H!Lk%v2&-J2K3-IIHDn#Q#O}ιKOiuuļ(I'I$I:iYIY)*BPPkWfYY̫p!v EeQU@ 4<'2&fm"Ҽ)#WĖ <,AP< c\3lV{>v%VYC7Tn?S"KM-Ϲh<^*9WD1UT)@はZqP˸hgs3;&B%g$Ky<4g qY{"WKb& Gu T>u!s{Kuv߸,V(\t)H("zUq8jS)R''ގI|Ζ-+!;si۞L+ǘrQNdJO+bINqơX߻ Y3V7)0>u.KğK_f{ Bf0BHu$p ;3ӽvo6BJ{I=$s;|f#囔?s'E°%X0*:fnc4ZwnhҒ15)Q9gv:9j'5c0nո:kcvqK7KgkxMkp7%Xnj7ʐLzűK1MakmjjNA쟐!0 jF =\xDPnH ^5HidfVTUTFbXo=Kb11-njF>9VHQD -عضŽɖdr7E[ ɉjבˡI>+fzs!^P8GjJF@HaP7.8L7閶%a bL$C7" 1oɷ֍w"kcp\^cx/Gb)$Zѝ UB 3X ͏f~P HIIeU!ZBR9n4NfF;#Vj+HbTAuէLlu^ t{-V(Qhه UmM44L Ltva s'FBGܱ|lnLeT2w6W˃d יs|@O$$^ŗx<0:Z re041D9iu^H {uS`4#rvL֭6AC-uY\O#$<6}ۚcrW,[{Ɍ9dQTbcR&Qр*~ wte +T#5U/1VZ؎W 3a{W c2U2Jq%YHHƃ#BO<1RYbFGv7%ɤ6G\^Y|~F5囟4b>*h |Kr81Xq4qv@z*'X)}4;<ݺڟKSh-y F0n!>;d3q[_`86ܰDB&\Me\Vd(^9=N;ow bZR/ c 1,,~5\ V俖}Wr:zJIUd!BCHR`߿ș}<5L2;I^~ 7 m˓|:8lּ<+Eb4o2p[,5zK*ؽRZ\߹uK+icm>"!/ۇf |+pmw~NM |rdՒoLԖN$h35n|Y,_lbm5l4S\2PrFzœ{iᠫ]^U\2w!D`\|y#24@M4 4@M4 MmU3bRVՈ278uyznF>~]hcl12Kdrv:0Bʤ!{΃?Տ >gv5%N״u-V=p5d2b.m$O% d,;' U'O,<$5vlH-]YCB[i!UX/ٶ2^8rK-;\Xet<Nݻe;r~{|k;?N3ۂ흵૷#I;W8`2 kR+~lVfݻ3N:I /I%V}r,E9W~='cYeȐD1}5űK1MakmjjNA쟐!0 bnͱ6SԱV,sbdc#ѥd@xˬю;}O붰hӒ劍e$/JpR&rG$.QvO7hG_kb~l^i%qeQƔ%$VKr6=_$*iZ -`!,'0I%rozjS$rT ^T5 C{_|T5=ddaC-E #BqUsz5Hrn"= ##( .6b^V6 xKۍfvJ+B;S"@AW ɾs4}9{o mj8YY]&_H76ks5ᱎk-V7iH}D|*ߚr9}T!=?ASbno Z$R`褘HWǏͷ|UnvRՉu\ǁb _c3ڱA_iXױV6 21@nG#96Gq{a{#CJ4מ>9(dlZm5 f;+ql& R!CS}6wDy D4}r2?D |,e:Ձmfa[";(ȧ؞>puk%w3ݻ;ر#}GboOC=mɳc%Xr U& +&XFHc (bDjE,@$/,9:rְ_#%rGq͎LOVa2CHđJ+J̠;^Ys]mmgHd뎨a|,vo0-5{i639lNUXˏBGY/xч_Tn 8-a7Jۦh`UHd_qDd 3r5j\Lw;ϒrOۏ^[U%nZa$ $?YOz>K7~ ix쥡v ò9:eqw~6%T1?=y^@ O/mm>܎!rn1jCA䗄7פ;hn&C]Db X87}.#kolb7 7Jފ4ᙓjOu[ "vD&+|A%\k0>&]^Sy$i~,Ji@ɞ֌VZWѫH…!+׫v piʹ vj_'Ylx𬣫' FOq۞5mq2mW\fJ\UGZMV͚W 4xV,5+ޞ|[%\~6\eS,ac/^OޛzmlDd?ݫZ?'XAr!y«Bת;K:w6>يS4*⢁q'ojdʠ)"E'#֫^׮y`UU\{"ͥQ%ԀCx(yC;X;;&ՙy'XE P#u *F‚OuZ;-JTφTIEA/@Jxn}ֶ>?۸xHPYk,IVF@5'?}@swRٚ[tV>1KC#^h2m5wglz;,!{z1"NDЂ_>8;ǎƈq8b]_kѴ^H2'S'VI ~6ܸݩZWʆ6ZHB~z=lYmg5shpRYڶZ^땹ʅ=@926ܛ$淮孓5"7UD@A` CS[ole|ؔ/դb)o $v9^^ 6GnY h} % "?=!.{7ǐ6^^k.#-Z*W8P׏+2(X #ADŽ3|;_'NbYkO LIquifc2q1u6Œ'2Y[Dv{{ǧ|R6L!-4X*}]}b9t[V.E,^G)yO:M='fR^lEX7<6zв-iP ;E3fmNHevp:A1sHq$v.V!–=9aIL.9 ْx半9խ#5:[g x,~1XAxø> Y+0*WH]t=_.O0S"X'3p,,%`2_QػTA:ePBJܱ7n>$?A7F[o5hn8rX" {&7`!Wcۑ':9}=fCjϺ[>i{Va'-O<>z'9__'UoCW@է+Wo)W-%,ɀœ;&dpR6H׺:rι(nm=S=w'5؛YG[5Q HT!#| ub-k i',01$9j^)19JZvb@Pr>թ9\sR̦#BTW,/hـ >GSx01vKd(yIlpװR4grhRǔڒaAT.Tۙ@[¾-˼sVء4Q[ȎP*՜.bY߆n$,d1p98?q:ɖ([{-~I9%/ #HVR# {g- Pڀ2P>Ğ/d(lŒ|^J21fid ĉvSo14AⲙX.6JݼU@JTuExmm0ir핰)HgH$p u#vftOm/ZJĉ؊:A2:~ÞIS=>{]+8ֱҳ>vȻN[ƟJ^`!盷zhVq# Lt=f%YT$|?4y] ^n 1R0AhI4x~-ۢ ~_~R> 47lEY!,P #٤^܅e1{*< ︳^`[8ك!!~`F vNvA: {7n{~Jey%%ǐcN %v*nl^^Ĭڧj ;e}CTsٹ]ͷnMzN)Yl{x#B4n1KuO.s{ Wn\Zr)kqيcʅC]d#'A14a4+^O%Ix捘|uDŽsHqxLeܝxӁNXEx`NVw.ƻO2U[*_[һڒ.y&NVX ,n;vkoqD'p쇐( xܕ [}Z`R+vNY|$UG!6ip 2WI{SacwmXYgь{YiZnrR $YGROO'A\V\a#??1GKVEVdXJ+'vPI߷Z. F Oδ6 On|-Vd{y bn@?Ml;"^ޞ M44MM44MV s.M+汔ѣ=-K<"T$O^llFstc0q~gFt+N^D-ۃCF'UOVC^>Į,<|B 'f/$j hc1͜(ב84ꥂjci%  346Hf{!ͣQye#%|dBIb !j ŵOpGu7&jSnV4fe%I0 ZjVy%, <1*cnQ.O ko[ŝ,bp&p5AXh2<&'+Cc.V 4uRǪ($u-Oin IQ19>Z/hag( (x؝˸"T.DQ3zZGfݛ~Gwf&w4V֫h sKy,^%\B_$)U -. !e|IL8<φSp<OiعwYHfef"p:?=8P۩ kA]UxbgIc-9'k#d2F{`hcB,TWkƛн VdYe\C|Q]191\R!Z jI<)U` r~}q+g;ZdQfKGF2$8q|Szl|J]|bXZr1AeM2;FxQg =ʗ0x&oۯ\/ ԨxۃN8CdZ+7?Zw礈~S#ZGۛolrkyz;&EX %:ʊATIAt pCIe}>؝=r;T^GŠVRD V^^V6rENxH.G }(C?GƼᶮR{}ԏz5gHC?2; b˼tnKOJ*PYfEDnAD9kv^ Z~⿒(Y Kh~܎B6 7 |x1Cy8#yU<Gk`[ũ 0T _Y,ܙ=h*)^Y[/iU󿆭br4Zf^BAx8]իba .=k9L Ҩ72NGN@('&{nKyVi/#QRH"pJ'9vϥqSXL߂r\|u(Ceh"9?n ;ch2r*6vbl]XEfLPIۑ&ė Qn:⽅\CazXk,Ed1#qKx|eC^`¼P(^a$+?7+ fF0_ ]0?Nsܹcy|9+~nU/>?z XKVvC;*te2Yd4[;x)ym-C+b8̯*3օorm?[=)q[ldtUeU[G#n>׍> 9-ɌɪORz2вH]p6t@LW._4ۋ%oqc$ekf[c6ggZc<B"ff܎CIYS?}{`Vy%pIllr+#,Ss?}_pLL VXc Yg?$­-)d) 1I/f_ mp?W~]'xRcf9 8P2^ҸH{ez灡~)o=d;/-J,/V6܌) `0v`"=Wkj+,L]$mV8,`0\r<{xDs $Lα{rA(z^rT>臭Eq{xcxH ~ E9(. Gޒ]0eSX=MPXuy ૼ0gRCF͌gY\'=^[C4 jňI-mF-g-5(}R$|kڻ5Iac#R?'yRXU ukNpm [\̳OJIJ_SO[fA;ҟs_JLfZk7BNRX%8E8Wrm]>mĸ's ^{#/<ʑ^$/w.\gjRzXrY@~Mn62ևXK5mC:,Rz{,]zUﭽ6]܎\\,݄gxE~kxSA V$mL"3R|k1Xi׳@#O׿;;?7U͹MVi]QH좻 "bw;KL6{V-XY;XF~gs< v7C,׭-jլ$28y^EDQŃU; -쬋VI,昰 B^x`9?p>Gmdeڏ _hie }c}M}FKgsr'u1'YYh kv줉Η}ͮc7GqEI?(8V&^%odtF[qbfōe תnO<s{s+9LNj} {Hec^{@^C7~͆o醧E0Z{aRzՅE̽Af2AT%G~[a(Wx[YjY+ q׺%f*15qt5-sastEֱ.-! sp!n?(+",\̭mScO5ݗ1Y=Z2c,)DUVD߿o2P6᷸Q_zEe-|du:Ѡ&$O 3˂ͳ#.71Z֠hNG#`zW3{;%,e $׭R=]V)$ xG2^@Smc;gcYr tVUT$0>A WoCxdvR#1P$x{1C.{Ȉ @<}΃קrnaYz\3"G:̉{_*݇G w>jF~Nԥ$+?,@ Aգ(Sw×x\%51^eNϑPaGnr>j0̵n+)>Kp;p8<+`pMGC78Y8[1_X=SXRTdQ_yd?ABc CnzbLv*zAЖnLPL{Q,`in5 ǥY'{ng'\FA2֬syy۟nf*d&YH<`JyZNE՞,e|@u9Zߩgc}K|b72ֳNJ`eDeoo#j}L.C5qr5s dE7H 0Bs}s.M+汔ѣ=-K<"T$Ohμ_-jrUk֖+kt9m"rdn~GsΨᎵnE+"X8`:?qT~@?އhNWI[=5iU:U=kbs;r\Ŷi%lD/JJ$--峎TȨᅈTG$$o"#B(V5jyv^gv2)1_JZAJV) 8[oڗxe0x%dHbk*8r*EPnFHf6w|?d7yy~k7f{ &,s,UK@S~M62[rW[pD*<,_ +G=nT&'/{&Z"U,-k4gEbGA ܧp&:ԥͯ$Y*VXA!k !T 8??bLVRru2A!A $]fCrd6J''4lZ<9I^H\ k՟`To<=k-F rKN R(R%G䐰mOL-2[4 >%7?1>>O?;Ƀk·aۮ,bk1W{ \ 7fPʤ[b=8S%"n*Iys8x'ƉcbMstdb.׵`ZRK3^" Zӱ.4hEY7%X2[6.nW6 ʱ$ VwPG :f=ֽ{ b9'*$Z*{+Ƶ һݳST8o,H(%[t <BTV$=Rՙ+^FX,r5% Nv^奵ܶqʘ0J䄑 DbWe ߠFPՃӬx6ebp$Gbl8 lmKYODz<~2D1T59fg"J(^7#ASmLZuVmޤPYVĉ#P!d|us)p{ 5[6g=vv/<]zyUpG+S5}_jY~4K嗸1w5y=GΪl49b#(".xiӳuSFb'WpX{s!yqvm* [趚+;V@$4t-L:r&=燆;ey:<iS~_[{xzqw>>{kC;rpZr8ZL;4r 9DA馚iiiiiiiiY m۩Z*o v:{ N{)=1Zݕz}3%foA^qvZCe5ez4W?fLHng,y?O*ٻ|ŚVpTEe 4sFom=6& V)| Y'xd{1U?`uf;ߛ)^5Mn4{b;[rʬꜴvn_vN;]a23U^ͷF,U T&8^zj. H?b\ZyGnjYfL٭4* `(cP?`4 4@M4 4Abݫ0ֆřF$.UYܝpihihihihn)jvf+E$,HQHIdfR>1MM44MM44MM4sطj5fiI!e @5{c'\in޽fkVO<Wc31f$I$M4-ڳ hlYhaHYaBP^hihihihihihi诡{i+jӕEuV?Om/E ZrvNpXF乇Y줯vH8~23b$xW^9J;Tdb*YG#UNTC3:x"r: s .Oq+Z,b#v%|xظUd@8 Iv1erM&:{7o%i>ekUƽ0^co՜\\~<1e0[u|~ mmGs-PH޵k!.!(=ʨQ$ t-D, Z9HB@%YXr }jڻ2W )pEZHFݒ?|u^nĚI=ԯvv}X!P&p >x}}3noN(A~V=b 81pCYC`s _秼}37FsɿZ鬗-Jʯ+tO`3fF!K*G5ñmMb}v (!Iك>rU`fRJmG`&Dg; ƣ"Nrp+LdP^zߘ#6{Z,i,YO{|)Ua)Ve!o-K \4Qw Ÿ9rFv6ߟA oռ1Ea+ײ ;E?58 VG}Rzٷա[$x6D#B|PAxvwT_SC۱5Gķi3L9):[oL-JlO 8Y#J#Tpɺi1aF$}g[5gXIW qzSޜn\ Mc.=?K+# j||8<0tCmmC^G-md uA^xcӷSghx%rvɐ$Uk޳G6Vgun+DuO;>Sl^%NqZNxyOծ[4c49xsrժb1*Ctx1v𣓠{/#7cr@)4;{I'9Q0$U%=/߽MɅb%$Cu3EWܙCK_uhihihihiov_kkv(zıNdV1*-⥫o{27ofpY<ѳJS(4^Z@+TlSۘ7&gsRQUiӡB$<}C/ƨo fU0Ic 9ت%x*; V,]m'8;Hү.WyO _R5ZVK$pܼ:B ጞ%v_vfX:#xfi'c扖!^?d4jḷ vsQs7yaw02Č{;t-4@M4 4@M4 4@M4 4@M4 4@1t&72F0=b#xpXÙ ~tT]YpЗӥqv$W!5}خHe N2$|h%r т*8qjW.ώ ˪c(̠Ak1ʸ;nxiRk'9__'UoCW@է+Wo)Wu-B=g1ճ>섚ȯ:E-gf\v3oطGr6;3zP$U%r=JGP`ʊ rK|9OZOtIn{}JukÑ K w#zu囯U#VT& Ѿ0;g{OUUNyx["ڹZH,RS'"q՘TꯃVGonKe+O˄z"/\McT*Mܹi{axѴpxwnLx9jeׄb&Z%%ќՔ7o7*.ݻ@uOr֕hI܁Þ@jp|N|LR(1,IVo+,+=zK-=긚8 :FS |_+OxpttMM4wpCnTo,-Sk״Ӊʌz+/ :v\q%){ _9,.[#љw]yK5k$LowȪeD/̃r[TVnaq1Қs;$OfYf3swK6* T#~z/*xZlB{5-M{UqM[4WYcIf;P$E@@"-by֛5GO/i*B&Iey>:Vڃjۉ&ծ xt@44 m67'qoG|r-~JGi_=]>yh<GV}ٽ{:Jש(zK 8/ |!=nyfX4MM44MM44MM44MW?Jk27 C˄ZfYgIiZѣȨytNDq晫6ݩ.\k ijȵXdeQ я9YInH++:&V٘ 7tfGIy█a uG+$~F )aZ83#'#1(0321bQKsݻO J,f&՜𼅈9-*KXbGev3? vD!n U &v 0Y lW'5tqb_"ľ7~~Q|\!ŏ7C)L.eU+@#IBˢ;x;2ySMM45sYtTd1,(HY+Bz_䷤v=6~߭9^xo%r&aYe=Ht>z΃@wSdvE|&*\7JtYiro%Rj]n y%>;kKfh!+8,M.<!5nG#{pv&ҥ5YqWk+%Y&b Ooݏ!mQkfAoĎRer< : :e^liIl;#rHZi*$@Ǖp~?[};ʈ6*(g鲒u6@? q,^3 \{Ii&:GDVZki $q%6bCrRݱxObߵYxf%6: aV< XP1{?m68K1%`aQPi̇U,; r;hإ!ԲvIb4e\!=ٜwWJN<l;:Znq6U2xWbDa"v8')WJݚOFHO#5[{O %,vQ-&.VeĥЕgXCgw匪քm QTC*zqPT(;uWs[J_-c 㳶psǰ!{1e B!éyfBJɆVU%喭B+ <25 P=ƪvbeD{ ltIaM pxo8*z&` d*"B- $ܖ(j,ٺX*Xdr֖vkY$q,O!=/GT[r[ ?o֊<7H eZ:u=UIAn_mW$ iK$6?&r+DA²1l~R4۵;2'*@atA0G 9<")qr/2uWY=;0#Q+K{s j+C]&8#dGDCI?sՌ] { իvoQO ^:zxl.3n=g3;DHCe!@< 4@M4 ^}*r8sjNAbZYVdR9Nړfbٺ5ㅢZV T[8#G9Aw.k'fx jcylT#7E18W`QW1Of362avzK9_vVC%T9`rc dX"?zDR(0oC`ybG_8v8L^8 E~Zg`kxL2ƬW29'Ngh2Wo%4?'-Zo'#y-K{O,_ڤ؋Ʊ7ӏo/ y1?zojlK~ kn(SvI 7`<2'p$` TYL\_=Eʼn|Er$_3] wd dr|X.Gg+e*욗6lb>|1f&kA`SZk[0BL(@#9Y-q71.v0 KS׏p>xRݸVYK$ָŬ6Kf"\Z]H<(HTN݋!?VwǓ>w0ol^o*Q7!OGxDU P#I0 v-$,ؤ# ?Lq!tZ+*yq [1Iȼ $Rxv`:(5Z92˛z#+51w'33K鐘ʖ$quςܒ_&2FSASӂA KzAwaS#gSR\"iS^0GN窩`W :m-icX &FWW#D#(?ٍRlԯ 2K,Jt%^E by+lnޚkN=aub{āXq$[R6l {x؛_s%zB&BWz9-p&r~D&3=~䥶Ғ8X^)U$<ngыxͷP{qG6_ 'V@#Gp#=8SЃ.&.fҞ^դҒ+I8#} j{wWz-*G\ԆFA;>?4# CO΃-Wp Z_ 1mBdqV`Cy6+pn;zX_%"۞G? >@Vo[9 ̓K­\,II)c#;`I G qElݨ6j^ZA'DR, ^&U-7Vc *{;l|k7|F2ycN$1^uVfX5dE޲*ޫIwvG{9I ;!UDn9?O HquٌZH,g0Lrq "SٳEbڅ',<wdmL_mewܳaiҢ\2ܣ)5< r8ܗZ9UTZG\ #xc7G]E߳zN*e.\}I?;><.BZ\1@(%(,3|wK3qV4QD[g%Rf"X4q,מ%AlEob\FFwSK>I$-X/NvlGk)/ou}+$c"3XqʞCUNd*{3t+F+ҷG D5%$uwkz`cIV\G#zԕa+ G(1M'R C}n ;B}]pʒ`I+fD~ݐ1 Th,9s9.e,NmÕ^Y▟Q ; ^# ؒ<5k(IBwv~=Aoq=g!ؽV>njF 8u.K7ej`1<.>bzbז[B4 ahEO pG C!>c4(M:h>$܆Vz(nmPqx<ۑ+R|E1jҎ\{|msI/d(٭$gz1\He{ KFܙu{q^"ӁX؏I!P;K'Q=ݸpǎfd0Fb(⟰e!r8w^$GRdFXgHe*Pk`{sz)~{B|҈Ԗ! ]K+!nL!ry9͡5gڈ+ոTVIX/kxa[NNK L՜@U|> Xhlkg+]Õy &e:w=~{Gx3[+oڗi?vD5&ٯH+]uxeDȶS;VO5Kga6IbVb@]ޛ׋mX+cTNK+R7/I%QpAbO6跑qvcb+Je%QXzկmW8L\"$Ȥ*CW䷑n5L/.Go#?hAU[A C8y9:}ip͂w1Xxsۚ;)1M]+%!?߻]Q.jRT5! JMU]-@|Jury?$u$Y1׊'yUBdtP0A;w֭gsc!j1J $P{ >ޗ`w ~zkccd.Nk`AG#M7&ɕ!4&ctU 瓀%sp? %t =Vnu9p@: /ݼfGsWuG5*-EnEỉ=Z5n5%/ g vrJ{eEJgYXҥcvY jQ*OV+SOʷa7z:b=n W6N|zdUW!U5ٖ!_$}ɐ׍g:<Җ%gCu+tCY^ǂ53ޚmWT6u1)ZyLąw5Yj7aTn8X JY\ 4i䏬j#bԁ7$|9VR h!NG;a{ۦgU2XKrc"<,Okl]ٖoƫPeU`K 1t*u4ܕpBp$^3CPw:fە4"9>{uOo}*tcF$)4r#9#'S|ZXSy"%W{wh/{wӽ5^&O)0bc"UaH!T6gm%̞m)ٳn*Z5~"gNF㢱OCbcEag5RF61ݐ^S\"[~'l~ܔ6j\:o {( N|,<ٹE`|Nne_簻;od%Ւ6y~<0> {3jmOS w 8Lj%bWakJ0?+]ӝ׻{ml] U>:h>$]w: AlWZDҸPIY4qBOկmW8L\"$Ȥ*CW䷑n5LI) WnSF@7nS+$wCSelRŻ/4{)fzihihihihihihihihihihihihihihihihihi诡{i+jӕEuV?Om/E ZrvNp$6cx_&b,qף?D߯{,&;1,YaUGS$~%TL>d馚)hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihiey_C3Z4N[2x?x_ggA>8Տ?gp_c!1K^D~ x>Sׄ)#M4׻M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4A[Hv7>lōIGjZ3Q*TOBm+-:nԳYF(X,zPлvRPYD,S;'?C+Sʰ!㿆}3eZ1S-~Y U@3g/whohas-0.29.1/intro.html000066400000000000000000000205041252663410600151230ustar00rootroot00000000000000 Philipp's Homepage: whohas

whohas

Description

whohas is a command line tool that allows querying several package lists at once - currently supported are Arch, Debian, Fedora, Gentoo, Mandriva, openSUSE, Slackware, Source Mage, Ubuntu, FreeBSD, NetBSD, OpenBSD, Fink, MacPorts and Cygwin. whohas is written in Perl and was designed to help package maintainers find ebuilds, pkgbuilds and similar package definitions from other distributions to learn from. However, it can also be used by normal users who want to know:

  • Which distribution provides packages on which the user depends.
  • What version of a given package is in use in each distribution, or in each release of a distribution (implemented only for Debian).

News

There is now a "--no-threads" switch for those that need to suppress threading (not recommended, will be very slow).

Tutorial

It is suggested you use Unix command line tools to enhance your search results. whohas is optimised for fast execution. This is done by threading, and the order of results cannot be guaranteed. To nonetheless get a standardised output, alphabetically sorted by distribution, use the sort tool:

whohas gimp | sort

You can use grep to improve your search results. Depending on whether you want only packages whose names begin with your search term, end with your search term, or exactly match, you would use a space before, after or on both sides of your search term, respectively:

whohas gimp | sort | grep " gimp"

whohas vim | sort | grep "vim "

whohas gimp | sort | grep " gimp "

The spaces will ensure that only results for the package gimp are displayed, not for gimp-print etc.

If you want results for a particular distribution only, do

whohas arch | grep "^Arch"

Output for each module will still be ordered, so you don't need to sort results in this case, although you may wish to do so for some distributions. Distribution names are abbreviated as "Arch", "Debian", "Fedora", "Gentoo", "Mandriva", "openSUSE", "Slackware", "Source Mage", "FreeBSD", "NetBSD", "OpenBSD", "Fink", "MacPorts", and "Cygwin".

Output in version 0.1 looked like this. The first column is the name of the distribution, the second the name of the package, the third the version number, then the date, repository name and a url linking to more information about the package. Future versions will have package size information, too. Column lengths are fixed, so you can use cut:

whohas vim | grep " vim " | cut -b 38-47

The first bytes of the data fields at the time of writing are 0, 11, 49, 67, 71, 81 and 106.

Here is an example of whohas 0.1 in a terminal session, showing how it works with grep and cut.

Features and limitations

Debian refers to the binary distribution. Slackware queries Current only - Slackware package search is currently offline and undergoing redesign, therefore I disabled the module until I know more. Binary sizes for Fedora are package sizes - space needed on disk will be greater by about factor 2. Binary sizes for Debian are unpacked sizes. All details (including availability, version numbers and binary sizes) are for the x86 architecture.

Debian version numbers in rare cases may not be for x86 (will be fixed). Gentoo version availability may not be for x86 (will be fixed). I recommend you consult the URLs provided in the output, which give detailed and accurate information about each package.

You may want to use a terminal that recognises hyperlinks and allows easy access through the browser, such as gnome-terminal.

For Fedora, only release 12 is enabled by default, and only the most up to date package will be listed if different versions are available.

For openSUSE, repository designations are abbreviated for screen space reasons: the tilde symbol, ~, replaces "home", and any trailing string that simply points to the current release is truncated. Nonetheless, some of openSUSE's repository paths remain too long to be shown in full.

Appeal

I would like to encourage distributors at this time to provide web query interfaces to package lists, and specifically provide the following information: package name, version, date, size and a url to further information (maintainer, build information etc.)

Changelog

Link

Dependencies

  • date utility
  • Perl
  • LWP::UserAgent (usually packaged as perl-libwww or libwww-perl)

Currently, the local repositories created in the user's home directory take up 900K.

Whohas.app

Whohas packaged for Mac OS X. Simply put it in your application directory (it will not work anywhere else).

Whohas.app-0.21.dmg (not updated to latest version yet)

Third party tools

Christoph Schneeberger has set up a web-based interface here, the Python code for which can be found here under a license that requires copyright notices to be maintained.

Joost van Baal has produced an html converter for whohas results, found here and examples of input and output files here.

Bug reports, patches and new modules

Send them along to phi1ipp@yahoo.com. Patches are more welcome if they're short (is less than 30 lines asking too much?). At this stage, I'm probably not going to write additional modules myself. But if you want your distribution or repository to be included, your chances of getting someone to write a module for you are greatly increased by providing a package list file or query interface. You should aim to include: package name, version, date, size and a url to further information (maintainer, build information etc.)

Acknowledgements

Thanks to Andrew "ruskie" Levstik for suggesting the Source Mage module and providing a small package list file on their server for whohas to parse.

Thanks to Ladislav Bodnar of Distrowatch for advice on version checking, and his list of seminal Linux packages and stable version numbers.

Thanks to Asari Takashi, Ladislav Hagara, Enrico Tröger, Steve Cotton, Evgeni Golov, Giuseppe Iuculano, Cristian Ionescu-Idbohrn, Sylvestre Ledru and Rain_maker for sending patches. Thanks to Jonathan Wiltshire for the original manpage, and forwarding Debian bug reports. If I've forgotten to mention anyone, please let me know.

Also thanks to all package maintainers.

History

whohas started life as whichdistro.pl, but its author preferred the shorter, hopefully more memorable name which is more conducive to word play.

 

 

 

updated 11 February 2010

 

 

 

 

whohas-0.29.1/usr/000077500000000000000000000000001252663410600137125ustar00rootroot00000000000000whohas-0.29.1/usr/share/000077500000000000000000000000001252663410600150145ustar00rootroot00000000000000whohas-0.29.1/usr/share/man/000077500000000000000000000000001252663410600155675ustar00rootroot00000000000000whohas-0.29.1/usr/share/man/de/000077500000000000000000000000001252663410600161575ustar00rootroot00000000000000whohas-0.29.1/usr/share/man/de/man1/000077500000000000000000000000001252663410600170135ustar00rootroot00000000000000whohas-0.29.1/usr/share/man/de/man1/whohas.1000066400000000000000000000033561252663410600203750ustar00rootroot00000000000000.TH "whohas" "1" "0.29.1" "Philipp Wesche" "" .SH "NAME" .LP whohas \- findet Pakete in verschiedenen Repositories .SH "SYNTAX" .LP whohas [\fI\-\-no\-threads\fP] [\fI\-\-shallow\fP] [\fI\-\-strict\fP] [\fI\-d Dist1[,Dist2[,Dist3 etc.]]\fP] \fIpkgname\fP .SH "BESCHREIBUNG" .LP whohas ist ein Kommandozeilenprogramm, das verfügbare Pakete von Arch, Debian, Fedora, Gentoo, Mandriva, openSUSE, Slackware, Source Mage, Ubuntu, FreeBSD, NetBSD, OpenBSD, Fink, MacPorts und Cygwin findet, die einem Suchbegriff entsprechen. .SH "OPTIONEN" .LP .TP \fB\-\-no\-threads\fR Keine Threads bei der Ausführung, Repositories werden seriell nacheinander befragt und jeweils die Antwort abgewartet (sehr viel langsamer) .TP \fB\-\-shallow\fR Nur ein Aufruf pro Server. Bietet weniger Informationen, ist aber schneller. Typischerweise sind Informationen über Größe und Release-Datum der Pakete betroffen. .TP \fB\-\-strict\fR Listet nur die Pakete, die genau \fIpkgname\fP haben wie ihr Name. .TP \fB\-d Dist1[,Dist2[,Dist3 etc.]]\fR Durchsucht nur aufgelistete Distributionen. Gültige Angaben für Dist1 etc. sind "archlinux", "cygwin", "debian", "fedora", "fink", "freebsd", "gentoo", "macports", "mandriva", "netbsd", "openbsd", "opensuse", "slackware", "sourcemage", und "ubuntu". .TP \fBpkgname\fR Suchbegriff .SH "DATEIEN" .LP whohas speichert Cachedateien für einige Repositories in ~/.whohas .SH "SIEHE AUCH" .LP \fIintro.txt\fP und \fI/usr/share/doc/whohas/intro.html\fP sind alternative Quellen über whohas. .SH "AUTOR" .LP whohas wird von Philipp Wesche entwickelt. .LP Diese Dokumentation wurde von Philipp Wesche geschrieben, basierend auf einer Vorlage von Jonathan Wiltshire für das Debian Projekt. whohas-0.29.1/usr/share/man/man1/000077500000000000000000000000001252663410600164235ustar00rootroot00000000000000whohas-0.29.1/usr/share/man/man1/whohas.1000066400000000000000000000031501252663410600177750ustar00rootroot00000000000000.TH "whohas" "1" "0.29.1" "Jonathan Wiltshire" "" .SH "NAME" .LP whohas \- find packages in various distributions' repositories .SH "SYNTAX" .LP whohas [\fI\-\-no\-threads\fP] [\fI\-\-shallow\fP] [\fI\-\-strict\fP] [\fI\-d Dist1[,Dist2[,Dist3 etc.]]\fP] \fIpkgname\fP .SH "DESCRIPTION" .LP whohas is a command line tool to query package lists from the Arch, Debian, Fedora, Gentoo, Mandriva, openSUSE, Slackware, Source Mage, Ubuntu, FreeBSD, NetBSD, OpenBSD, Fink, MacPorts and Cygwin distributions. .SH "OPTIONS" .LP .TP \fB\-\-no\-threads\fR Don't use multiple threads to query package lists (will be much slower) .TP \fB\-\-shallow\fR Limit to one call per server. Faster, but loses some information, typically package size and release date. .TP \fB\-\-strict\fR List only those packages that have exactly \fIpkgname\fP as their name. .TP \fB\-d Dist1[,Dist2[,Dist3 etc.]]\fR Queries only for packages for the listed distributions. Recognised values for Dist1, Dist2, etc. are "archlinux", "cygwin", "debian", "fedora", "fink", "freebsd", "gentoo", "mandriva", "macports", "netbsd", "openbsd", "opensuse", "slackware", "sourcemage", and "ubuntu". .TP \fBpkgname\fR Package name to query for .SH "FILES" .LP whohas uses various files in ~/.whohas to cache package lists for some distributions. .SH "SEE ALSO" .LP See \fIintro.txt\fP or \fIintro.html\fP notes on using whohas. .SH "AUTHORS" .LP whohas is written and maintained by Philipp Wesche .LP This man page was written by Jonathan Wiltshire for the Debian project and adapted for a new version by Philipp Wesche whohas-0.29.1/whohas000077500000000000000000001150141252663410600143220ustar00rootroot00000000000000#!/usr/bin/perl # whohas, a Perl utility to display availability of source # and binary packages from major Linux and BSD distributions # # Copyright (C) Philipp L. Wesche 2005-2011 # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use strict; use sigtrap; #TODO --fetch-unstable switch #TODO make sure that debian's version numbers are from i386 #TODO get date info about debian, ubuntu (link is to changelog) #TODO get date info about slackware packages from subsequent links - postponed until slackware packages is online again #TODO architecture tests for those that support several #TODO Gentoo: only report two most recent for each package? #TODO make more use of the conf directory, e.g. for Fedora, Sourcemage, so we download those indexes only sparingly, and save ourselves processing time; MAKE SURE YOU WRITE THE PROCESSED RESULTS FOR EASY PARSING ON THE NEXT RUN #TODO we can also cache search results there to drastically reduce query time on subsequent queries #TODO add option to override the cache (newly fetched file written to cache) #TODO ubuntu: allow two releases: the long term supported and the most recent #TODO allow searching on several packages; return results only for those distros that have a hit for each package, possibly in tabular format #TODO deal gracefully with hyphens that may be present in some distros but not others, i.e. include extra hyphens in regexes, and allow user-specified hyphens to be absent use Config; use Env qw(HOME); use if $^O ne 'MSWin32', 'forks'; use if $Config{usethreads}, "threads"; use Getopt::Long; use LWP::UserAgent; use Thread::Queue; my $conffile = "whohas.cf"; my $confdir = "$HOME/.whohas"; # make .whohas directory in home directory unless (-d $confdir) { mkdir ($confdir, 0755); } my @columns = (11,38,18,4,10,25); my $cols = 6; our $fedora_min_release = 20 ; our $fedora_max_release = 21 ; our $debian_current_release = "all" ; our $ubuntu_current_release = "all" ; our $openbsd_release = "5.7" ; my @distrosAvailable = qw(arch cygwin debian fedora fink freebsd gentoo macports mandriva netbsd openbsd opensuse slack sourcemage ubuntu); my %distrosSelected; foreach (@distrosAvailable) { $distrosSelected{$_} = 1; } our @distroSelections; my $nothreads; my $shallow; my $option_help; my $option_strict; if ( -s "$confdir/$conffile" ) { eval { do "$confdir/$conffile"; }; if ($@) { print STDERR 'Eval of configuration caused errors. Aborting.\n'; exit; } } GetOptions( "d=s" => \@distroSelections, "no-threads" => \$nothreads, "shallow" => \$shallow, "help|usage|h" => \$option_help, "strict|s" => \$option_strict, ); if ($option_help) { print "Usage: $0 [--no-threads] [--shallow] [--strict] [-d Dist1[,Dist2[,Dist3...]]] pkgname\n"; exit 0; } if (@ARGV > 1) { die "Error:\tToo many parameters. Usage: $0 [--no-threads] [--shallow] [--strict] [-d Dist1[,Dist2[,Dist3...]]] pkgname\n"; } elsif (@ARGV < 1) { die "Error:\tPlease specify a search term.\n"; } if (!$Config{usethreads} && !$nothreads) { $nothreads = 1; warn "No threads support, --no-threads is forced.\n"; } # # BUILD %distrosSelected # if (@distroSelections) { foreach (@distrosAvailable) { $distrosSelected{$_} = 0; } @distroSelections = split(/,/,join(',',@distroSelections)); for my $distro (@distroSelections) { $distro =~ tr/A-Z/a-z/; if ( $distro =~ /archlinux/i) { $distrosSelected{arch} = 1; } elsif ( $distro =~ /slackware/i) { $distrosSelected{slack} = 1; } else { if (exists $distrosSelected{$distro}) { # NB only due to previous setting of hash values for all known distros can we use this test to see if the distro is known $distrosSelected{$distro} = 1; } else { die "Unsupported distribution '$distro'\n"; } } } } # # DISPATCH TO SUBROUTINES, THREADED OR UNTHREADED # if ($ARGV[0] eq "whohasme") { print "Congratulations. You discovered an Easter egg. Maybe you can send a quick email to phi1ipp\@yahoo.com to say hello and tell the developer what you think of the software.\n"; exit; } my $q = Thread::Queue->new(); foreach (keys %distrosSelected) { if ($distrosSelected{$_}) { if ($_ eq 'arch') { $q->enqueue('arch', 'aur'); } else { $q->enqueue($_); } } } $q->end(); if (!$nothreads) { my $maxthreads = maxthreads($q); my @thrs; for (0..$maxthreads - 1) { push(@thrs, threads->new(\&worker)); } foreach (@thrs) { $_->join; } } else { worker(); } sub worker { no strict "refs"; while (defined(my $distro = $q->dequeue())) { # NB this is only safe because we've previously checked for illegal subs &$distro($ARGV[0]); } } sub maxthreads { my ($q) = @_; my $jobcount = $q->pending(); eval { require Sys::CPU; }; if ($@) { return $jobcount; } else { my $cpucount = Sys::CPU::cpu_count(); return $cpucount < $jobcount ? $cpucount : $jobcount; } } sub fedora { my $baseurl = "http://dl.fedoraproject.org/pub/fedora/linux/releases/"; my $distroname = "Fedora"; my $arch = "i386"; my $searchy = $_[0]; my @names; my @versions; my @dates; my @sizes; my @repos; my @urls; for (my $i = $fedora_max_release; $i >= $fedora_min_release; $i--) { my @fed_urls = ("$i/Everything/$arch/os/Packages/"); my $file = "$confdir/$distroname\_$i.list"; { for (my $a = 0; $a < @fed_urls; $a++) { my @lines = split /\n/, &fetchdoc($baseurl.$fed_urls[$a].lc(substr($searchy, 0, 1)).'/'); for (my $li = 0; $li < @lines; $li++) { if ($lines[$li] =~ / +[^<]* *([^ ]* [^ ]*) *([^ ]*) *(?:RPM Package)?}); push @names, $name; push @versions, $version; push @dates, $date; push @sizes, $size; push @urls, "https://apps.fedoraproject.org/packages/$name"; } } } } } for (my $i = 0; $i < @names; $i++) { if ($names[$i] =~ /$searchy/i) { &pretty_print($cols,@columns,$distroname,$names[$i],$versions[$i],$sizes[$i],$dates[$i],$repos[$i],$urls[$i]); } } return (); } sub month_to_digits { $_[0] =~ s/JAN/01/i; $_[0] =~ s/FEB/02/i; $_[0] =~ s/MAR/03/i; $_[0] =~ s/APR/04/i; $_[0] =~ s/MAY/05/i; $_[0] =~ s/JUN/06/i; $_[0] =~ s/JUL/07/i; $_[0] =~ s/AUG/08/i; $_[0] =~ s/SEP/09/i; $_[0] =~ s/OCT/10/i; $_[0] =~ s/NOV/11/i; $_[0] =~ s/DEC/12/i; return ($_[0]); } sub macports { my $baseurl = "http://www.macports.org"; my @names; my @versions; my @dates; my @sizes; my @repos; my @urls; my @lines = split /\n/, &fetchdoc($baseurl."/ports.php?by=name&substr=".$_[0]); for (my $i = 70; $i < @lines; $i++) { if ($lines[$i] =~ /
/) { my @parties = split /\\/, $lines[$i]; for (my $javar = 1; $javar < @parties; $javar++) { my @parts = split /href="|">|<\/a><\/b> |<\/dt/, $parties[$javar]; push @urls, $parts[1]; push @names, $parts[2]; push @versions, $parts[3]; push @repos, ""; push @sizes, ""; push @dates, ""; } } } for (my $i = 0; $i < @repos; $i++) { &pretty_print($cols,@columns,"MacPorts",$names[$i],$versions[$i],$sizes[$i],$dates[$i],$repos[$i],$urls[$i]); } return (); } sub fink { my $baseurl = "http://pdb.finkproject.org/pdb/"; my @names; my @versions; my @dates; my @sizes; my @repos; my @urls; my @lines = split /\n/, &fetchdoc($baseurl."browse.php?name=".$_[0]); for (my $i = 60; $i < @lines; $i++) { if ($lines[$i] =~ /tr class=\"package\"/) { if ($lines[$i] =~ /^\/) { $lines[$i] =~ s/.*?\<\/tr\>//; } my @splitty = split /href\=\"|\"\>|\<\/a\>\<\/td\>\|\<\/td\>\/, $lines[$i]; push @urls, $splitty[3]; push @names, $splitty[4]; push @versions, $splitty[5]; push @repos, ""; push @sizes, ""; push @dates, ""; } elsif ($lines[$i] =~ /\Query took /) { last; } } for (my $i = 0; $i < @repos; $i++) { &pretty_print($cols,@columns,"Fink",$names[$i],$versions[$i],$sizes[$i],$dates[$i],$repos[$i],$urls[$i]); } return (); } sub fink_get_details { my @repos; my @versions; my @lines = split /\n/, &fetchdoc($_[0]); for (my $i = 60; $i < @lines; $i++) { if ($lines[$i] =~ /10\./) { my @parts = split /nowrap">|<\/div>/, $lines[$i]; unless ($parts[5] =~ /not present/ or $parts[5] =~ /unsupported/) { if ($parts[1] =~ /
/) { push @repos, (split /
/, $parts[1])[0]; } else { push @repos, $parts[1]; } $parts[5] =~ s/\<\!\-\-.*\-\-\>//; push @versions, $parts[5]; } } if ($lines[$i] eq '') { last; } } return (\@versions,\@repos); } sub size_trim { # give at least two significant figures; if a 10^3 edge is encountered, put a dot my $leave = length($_[0]) % 3; my $threes = (length($_[0]) - $leave) / 3; if ($leave == 0) { $leave = 3; $threes--; } my @parts = split //, $_[0]; my $retval = join "", @parts[0..($leave-1)]; if (length($retval)==1 && $threes > 0) { # add one more significant figure my $add_sf = $parts[$leave]; if ($parts[$leave+1] > 4) { # rounding $add_sf++; if ($add_sf == 10) { $add_sf = 0; $retval++; if ($retval == 10) { return(&size_trim($retval*(1000**$threes))); } } } $retval .= ".$add_sf"; } elsif (defined($parts[$leave]) && $parts[$leave] > 4) { # instead of defined(...), ($threes > 0) is also possible my $before = length($retval); # rounding $retval++; if (length($retval) > $before) { return(&size_trim($retval*(1000**$threes))); } } my @suffixes = ("k","M","G"); if ($threes > 0) { $retval .= $suffixes[($threes-1)]; } return $retval; } sub freebsd { my $query = "http://www.freebsd.org/cgi/ports.cgi?query=".$_[0]."&stype=all"; my @lines = split /\n/, &fetchdoc($query); my @names; my @versions; my @dates; my @sizes; my @repos; my @urls; my $now = 0; for (my $i = 50; $i<@lines; $i++) { if ($lines[$i] =~ /^
/) { my @parts = split /"/, $lines[$i]; ($names[$now],$versions[$now]) = &combos_freebsd($parts[1]); my @subparts = split /\//, $parts[3]; push @sizes, ""; push @repos, $subparts[@subparts-2]; push @urls, "http://www.freebsd.org/cgi/ports.cgi?stype=all&query=$names[$now]"; $now++; push @dates, ""; } } for (my $i = 0; $i < @repos; $i++) { &pretty_print($cols,@columns,"FreeBSD",$names[$i],$versions[$i],$sizes[$i],$dates[$i],$repos[$i],$urls[$i]); } return (); } sub sourcemage { my @grimoires = ("test","stable","binary","z-rejected","games"); my @lines = split /\n/, &fetchdoc("http://codex.sourcemage.org/listing.txt"); my @inirepos; my @ininames; my @iniversions; my @iniurls; my @inidates; my @inisizes; foreach (@lines) { my @comps = split /\^/, $_; for (my $a = 0; $a < @grimoires;$a++) { if (length($comps[$a+1]) > 0) { push @inirepos, $grimoires[$a]; push @ininames, $comps[0]; push @iniversions, $comps[$a+1]; push @inisizes, ""; push @iniurls, ""; push @inidates, ""; } } } my ($p1,$p2,$p3,$p4,$p5,$p6) = &search_by_name(\@ininames,\@iniversions,\@inisizes,\@inidates,\@inirepos,\@iniurls,$_[0]); my @names = @$p1; my @versions = @$p2; my @sizes = @$p3; my @dates = @$p4; my @repos = @$p5; my @urls = @$p6; for (my $i = 0; $i < @repos; $i++) { &pretty_print($cols,@columns,"Source Mage",$names[$i],$versions[$i],$sizes[$i],$dates[$i],$repos[$i],$urls[$i]); } return (); } sub search_by_name { # versions, sizes, dates, repos, urls my ($p1,$p2,$p3,$p4,$p5,$p6,$search) = @_; my @ininames = @$p1; my @iniversions = @$p2; my @inisizes = @$p3; my @inidates = @$p4; my @inirepos = @$p5; my @iniurls = @$p6; my @names; my @versions; my @sizes; my @dates; my @repos; my @urls; for (my $i = 0;$i<@ininames;$i++) { if ($ininames[$i] =~ /$search/i) { push @names, $ininames[$i]; push @repos, $inirepos[$i]; push @versions, $iniversions[$i]; push @sizes, $inisizes[$i]; push @dates, $inidates[$i]; push @urls, $iniurls[$i]; } } return(\@names,\@versions,\@sizes,\@dates,\@repos,\@urls); } sub netbsd_old { my $netbsdbase = "ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/"; my @ininames; my @iniversions; my @iniurls; my @inirepos; my @inisizes; my @inidates; my $now = 0; my $distroname = "NetBSD"; my $file = "$confdir/$distroname.list"; # if the list file exists and is recent, use its contents, otherwise download and parse a fresh copy if (-s $file && `date +%Y-%m-%d` =~ (split / /, `ls -l $file`)[6]) { open IN, $file; chomp (my @lines = ); for (my $i = 0; $i<@lines;$i++) { ($ininames[$i],$iniversions[$i],$iniurls[$i]) = split /\t/, $lines[$i]; } close IN; } else { my @lines = split /\n/, &fetchdoc($netbsdbase."README-all.html"); for (my $i = 10; $i < @lines; $i++) { if ($lines[$i] =~ /^