congruence-1.2.5/000755 000766 000024 00000000000 14376366051 013662 5ustar00obk1staff000000 000000 congruence-1.2.5/PackageInfo.g000644 000766 000024 00000011354 14376366031 016203 0ustar00obk1staff000000 000000 ############################################################################# ## #W PackageInfo.g The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov #W Helena Verrill ## ## ############################################################################# SetPackageInfo( rec( PackageName := "Congruence", Subtitle := "Congruence subgroups of SL(2,Integers)", Version := "1.2.5", Date := "25/02/2023", # dd/mm/yyyy format License := "GPL-2.0-or-later", ## <#GAPDoc Label="PKGVERSIONDATA"> ## ## ## ## <#/GAPDoc> SourceRepository := rec( Type := "git", URL := Concatenation( "https://github.com/gap-packages/", LowercaseString(~.PackageName) ), ), IssueTrackerURL := Concatenation( ~.SourceRepository.URL, "/issues" ), PackageWWWHome := Concatenation( "https://gap-packages.github.io/", LowercaseString(~.PackageName) ), README_URL := Concatenation( ~.PackageWWWHome, "/README.md" ), PackageInfoURL := Concatenation( ~.PackageWWWHome, "/PackageInfo.g" ), ArchiveURL := Concatenation( ~.SourceRepository.URL, "/releases/download/v", ~.Version, "/", LowercaseString(~.PackageName), "-", ~.Version ), ArchiveFormats := ".tar.gz", Persons := [ rec( LastName := "Dooms", FirstNames := "Ann", IsAuthor := true, IsMaintainer := true, Email := "andooms@vub.ac.be", WWWHome := "http://homepages.vub.ac.be/~andooms", PostalAddress := Concatenation( [ "Department of Mathematics\n", "Vrije Universiteit Brussel\n", "Pleinlaan 2, Brussels, B-1050 Belgium" ] ), Place := "Brussels", Institution := "Vrije Universiteit Brussel" ), rec( LastName := "Jespers", FirstNames := "Eric", IsAuthor := true, IsMaintainer := false, Email := "efjesper@vub.ac.be", WWWHome := "http://homepages.vub.ac.be/~efjesper", PostalAddress := Concatenation( [ "Department of Mathematics\n", "Vrije Universiteit Brussel\n", "Pleinlaan 2, Brussels, B-1050 Belgium" ] ), Place := "Brussels", Institution := "Vrije Universiteit Brussel" ), rec( LastName := "Konovalov", FirstNames := "Olexandr", IsAuthor := true, IsMaintainer := true, Email := "obk1@st-andrews.ac.uk", WWWHome := "https://olexandr-konovalov.github.io/", PostalAddress := Concatenation( [ "School of Computer Science\n", "University of St Andrews\n", "Jack Cole Building, North Haugh,\n", "St Andrews, Fife, KY16 9SX, Scotland" ] ), Place := "St Andrews", Institution := "University of St Andrews" ), rec( LastName := "Verrill", FirstNames := "Helena", IsAuthor := true, IsMaintainer := true, Email := "verrill@math.lsu.edu", WWWHome := "http://www.math.lsu.edu/~verrill", PostalAddress := Concatenation( [ "Department of Mathematics\n", "Louisiana State University\n", "Baton Rouge, Louisiana, 70803-4918\n", "USA" ] ), Place := "Baton Rouge", Institution := "Louisiana State University" ) ], Status := "accepted", CommunicatedBy := "Graham Ellis (Galway)", AcceptDate := "09/2014", AbstractHTML := "The Congruence package provides functions to construct several types of canonical congruence subgroups in SL_2(Z), and also intersections of a finite number of such subgroups. Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups", PackageDoc := rec( BookName := "Congruence", ArchiveURLSubset := ["doc"], HTMLStart := "doc/chap0_mj.html", PDFFile := "doc/manual.pdf", SixFile := "doc/manual.six", LongTitle := "Congruence subgroups of SL(2,Integers)", Autoload := true ), Dependencies := rec( GAP := ">=4.8", NeededOtherPackages := [ ["GAPDoc", ">= 1.5.1"] ], SuggestedOtherPackages := [], ExternalConditions := [] ), AvailabilityTest := ReturnTrue, TestFile := "tst/testall.g", Keywords := ["congruence subgroup", "Farey symbol"] )); congruence-1.2.5/README.md000644 000766 000024 00000002144 14376366031 015140 0ustar00obk1staff000000 000000 [![Build Status](https://github.com/gap-packages/congruence/workflows/CI/badge.svg?branch=master)](https://github.com/gap-packages/congruence/actions?query=workflow%3ACI+branch%3Amaster) [![Code Coverage](https://codecov.io/github/gap-packages/congruence/coverage.svg?branch=master&token=)](https://codecov.io/gh/gap-packages/congruence) # GAP package Congruence The GAP package Congruence provides functions to construct several types of canonical congruence subgroups in SL_2(Z), and also intersections of a finite number of such subgroups. Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups. Congruence does not use external binaries and, therefore, works without restrictions on the type of the operating system. It is redistributed with GAP, but is not loaded by default. Therefore, to use Congruence, first you need to load it using the following command: gap> LoadPackage("congruence"); Ann Dooms, Eric Jespers, Olexandr Konovalov, Helena Verrill congruence-1.2.5/COPYING000644 000766 000024 00000043110 14376366031 014712 0ustar00obk1staff000000 000000 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) 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) year 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. congruence-1.2.5/makedoc.g000644 000766 000024 00000007477 14376366031 015452 0ustar00obk1staff000000 000000 ########################################################################### ## #W makedoc.g The Congruence package Olexandr Konovalov ## ########################################################################### ExtractMyManualExamples:=function( pkgname, main, files ) local path, tst, i, s, basename, name, output, ch, a, location, pos, comment; path:=Directory( Concatenation(PackageInfo(pkgname)[1].InstallationPath, "/doc") ); Print("Extracting manual examples for ", pkgname, " package ...\n" ); tst:=ExtractExamples( path, main, files, "Chapter" ); Print(Length(tst), " chapters detected\n"); for i in [ 1 .. Length(tst) ] do Print( "Chapter ", i, " : \c" ); if Length( tst[i] ) > 0 then s := String(i); if Length(s)=1 then # works for <100 chapters s:=Concatenation("0",s); fi; basename:=Concatenation( LowercaseString(pkgname), s, ".tst" ); name := Filename( Directory( Concatenation( PackageInfo(pkgname)[1].InstallationPath, "/tst" ) ), basename ); output := OutputTextFile( name, false ); # to empty the file first SetPrintFormattingStatus( output, false ); # to avoid line breaks ch := tst[i]; AppendTo(output, "# ", pkgname, ", chapter ",i,"\n"); AppendTo(output, "#\n", "# DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD!\n", "#\n", "# This file has been autogenerated with GAP. It contains examples\n", "# extracted from the documentation. Each example is preceded by the\n", "# comment which points to the location of its source.\n", "#\n"); AppendTo(output, "gap> START_TEST( \"", basename, "\");\n\n"); for a in ch do location := a[2][1]; pos := PositionSublist(LowercaseString(location),LowercaseString(pkgname)); if pos <> fail then comment := location{[ pos+Length(pkgname)+1 .. Length(location) ]}; else pos := PositionSublist(location,".//"); comment := location{[ pos+3 .. Length(location) ]}; fi; AppendTo(output, "# ", comment, ":", a[2][2], "-", a[2][3], a[1]); od; AppendTo(output, "gap> STOP_TEST(\"", basename, "\", 1 );\n"); Print("extracted ", Length(ch), " examples \n"); else Print("no examples \n" ); fi; od; end; ########################################################################### CONGRUENCEMANUALFILES:=[ "../PackageInfo.g" ]; MakeGAPDocDoc( "doc", # path to the directory containing the main file "manual", # the name of the main file (without extension) # list of (probably source code) files relative # to path which contain pieces of documentation # which must be included in the document CONGRUENCEMANUALFILES, "Congruence",# the name of the book used by GAP's online help "../../..",# optional: relative path to the main GAP root # directory to produce HTML files with relative # paths to external books. "MathJax" # optional: use "MathJax", "Tth" and/or "MathML" # to produce additional variants of HTML files );; # Copy the *.css and *.js files from the styles directory of the GAPDoc # package into the directory containing the package manual. CopyHTMLStyleFiles( "doc" ); # Create the manual.lab file which is needed if the main manuals or another # package is referring to your package GAPDocManualLab( "Congruence" );; ExtractMyManualExamples( "congruence", "manual.xml", CONGRUENCEMANUALFILES ); QUIT; ########################################################################### ## #E ## congruence-1.2.5/lib/000755 000766 000024 00000000000 14376366031 014426 5ustar00obk1staff000000 000000 congruence-1.2.5/doc/000755 000766 000024 00000000000 14376366051 014427 5ustar00obk1staff000000 000000 congruence-1.2.5/tst/000755 000766 000024 00000000000 14376366031 014472 5ustar00obk1staff000000 000000 congruence-1.2.5/init.g000644 000766 000024 00000001474 14376366031 015001 0ustar00obk1staff000000 000000 ############################################################################# ## #W init.g The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov #W Helena Verrill ## ## ############################################################################# # read Congruence declarations ReadPackage( "congruence", "lib/cong.gd" ); ReadPackage( "congruence", "lib/farey.gd" ); # read the other part of code ReadPackage( "congruence", "lib/cong.g" ); ReadPackage( "congruence", "lib/buildman.g" ); ReadPackage( "congruence", "lib/factor.g" ); # set the default InfoLevel SetInfoLevel( InfoCongruence, 1 ); congruence-1.2.5/read.g000644 000766 000024 00000001236 14376366031 014745 0ustar00obk1staff000000 000000 ############################################################################# ## #W read.g The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov #W Helena Verrill ## ## ############################################################################# # read the implementation part of the Congruence package ReadPackage( "congruence", "lib/cong.gi" ); ReadPackage( "congruence", "lib/farey.gi" ); ReadPackage( "congruence", "lib/random.gi" ); congruence-1.2.5/tst/congruence04.tst000644 000766 000024 00000007634 14376366051 017536 0ustar00obk1staff000000 000000 # congruence, chapter 4 # # DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD! # # This file has been autogenerated with GAP. It contains examples # extracted from the documentation. Each example is preceded by the # comment which points to the location of its source. # gap> START_TEST( "congruence04.tst"); # doc/gens.xml:30-47 gap> FareySymbol(PrincipalCongruenceSubgroup(8)); [ infinity, 0, 1/4, 1/3, 3/8, 2/5, 1/2, 3/5, 5/8, 2/3, 3/4, 1, 5/4, 4/3, 11/8, 7/5, 3/2, 8/5, 13/8, 5/3, 7/4, 2, 9/4, 7/3, 19/8, 12/5, 5/2, 13/5, 21/8, 8/3, 11/4, 3, 13/4, 10/3, 27/8, 17/5, 7/2, 18/5, 29/8, 11/3, 15/4, 4, 17/4, 13/3, 9/2, 14/3, 19/4, 5, 21/4, 16/3, 11/2, 17/3, 23/4, 6, 25/4, 19/3, 13/2, 20/3, 27/4, 7, 29/4, 22/3, 15/2, 23/3, 31/4, 8, infinity ] [ 1, 17, 10, 26, 32, 18, 19, 27, 30, 5, 2, 2, 13, 28, 26, 20, 21, 29, 27, 7, 3, 3, 16, 31, 28, 22, 23, 33, 29, 9, 4, 4, 5, 30, 31, 24, 25, 32, 33, 12, 6, 6, 7, 19, 18, 15, 8, 8, 9, 21, 20, 10, 11, 11, 12, 23, 22, 13, 14, 14, 15, 25, 24, 16, 17, 1 ] gap> FareySymbol(CongruenceSubgroupGamma0(20)); [ infinity, 0, 1/5, 1/4, 2/7, 3/10, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1, infinity ] [ 1, 3, 4, 6, 7, 7, 5, 2, 2, 3, 6, 4, 5, 1 ] # doc/gens.xml:128-140 gap> H:=CongruenceSubgroupGamma0(5); gap> fs:=FareySymbol(H); [ infinity, 0, 1/2, 1, infinity ] [ 1, "even", "even", 1 ] gap> gfs:=GeneralizedFareySequence(fs); [ infinity, 0, 1/2, 1, infinity ] gap> MatrixByEvenInterval(gfs,2); [ [ 2, -1 ], [ 5, -2 ] ] # doc/gens.xml:152-160 gap> fs_oo:=FareySymbolByData([infinity,0,infinity],["odd","odd"]);; gap> gfs_oo:=GeneralizedFareySequence(fs_oo); [ infinity, 0, infinity ] gap> MatrixByOddInterval(gfs_oo,1); [ [ -1, -1 ], [ 1, 0 ] ] # doc/gens.xml:172-179 gap> fs_free:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);; gap> gfs_free:=GeneralizedFareySequence(fs_free);; gap> MatrixByFreePairOfIntervals(gfs_free,2,3); [ [ 3, -2 ], [ 2, -1 ] ] # doc/gens.xml:191-203 gap> fs_eo:=FareySymbolByData([infinity,0,infinity],["even","odd"]);; gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> GeneratorsByFareySymbol(fs); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> GeneratorsByFareySymbol(fs_oo); [ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> GeneratorsByFareySymbol(fs_free); [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] # doc/gens.xml:215-241 gap> G:=PrincipalCongruenceSubgroup(2); gap> FareySymbol(G); [ infinity, 0, 1, 2, infinity ] [ 2, 1, 1, 2 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] gap> H:=CongruenceSubgroupGamma0(5); gap> GeneratorsOfGroup(H); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> I:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(3)); gap> FareySymbol(I); [ infinity, 0, 1/3, 1/2, 2/3, 1, 4/3, 3/2, 5/3, 2, infinity ] [ 1, 5, 4, 3, 2, 2, 3, 4, 5, 1 ] gap> GeneratorsOfGroup(I); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 11, -2 ], [ 6, -1 ] ], [ [ 19, -8 ], [ 12, -5 ] ], [ [ 17, -10 ], [ 12, -7 ] ], [ [ 7, -6 ], [ 6, -5 ] ] ] # doc/gens.xml:262-271 gap> IndexInPSL2ZByFareySymbol(fs); 6 gap> IndexInPSL2ZByFareySymbol(fs_oo); 2 gap> IndexInPSL2ZByFareySymbol(fs_free); 6 gap> STOP_TEST("congruence04.tst", 1 ); congruence-1.2.5/tst/congruence03.tst000644 000766 000024 00000001750 14376366051 017526 0ustar00obk1staff000000 000000 # congruence, chapter 3 # # DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD! # # This file has been autogenerated with GAP. It contains examples # extracted from the documentation. Each example is preceded by the # comment which points to the location of its source. # gap> START_TEST( "congruence03.tst"); # doc/farey.xml:59-65 gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]); [ infinity, 0, 1, 2, infinity ] [ 1, 2, 2, 1 ] # doc/farey.xml:76-81 gap> IsValidFareySymbol(fs); true # doc/farey.xml:99-104 gap> GeneralizedFareySequence(fs); [ infinity, 0, 1, 2, infinity ] # doc/farey.xml:121-126 gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i)); [ -1, 0, 1, 2, 1 ] # doc/farey.xml:142-147 gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i)); [ 0, 1, 1, 1, 0 ] # doc/farey.xml:159-164 gap> LabelsOfFareySymbol(fs); [ 1, 2, 2, 1 ] gap> STOP_TEST("congruence03.tst", 1 ); congruence-1.2.5/tst/congruence02.tst000644 000766 000024 00000007215 14376366051 017527 0ustar00obk1staff000000 000000 # congruence, chapter 2 # # DO NOT EDIT THIS FILE - EDIT EXAMPLES IN THE SOURCE INSTEAD! # # This file has been autogenerated with GAP. It contains examples # extracted from the documentation. Each example is preceded by the # comment which points to the location of its source. # gap> START_TEST( "congruence02.tst"); # doc/cong.xml:71-94 gap> G_8:=PrincipalCongruenceSubgroup(8); gap> IsGroup(G_8); true gap> IsMatrixGroup(G_8); true gap> DimensionOfMatrixGroup(G_8); 2 gap> MultiplicativeNeutralElement(G_8); [ [ 1, 0 ], [ 0, 1 ] ] gap> One(G); [ [ 1, 0 ], [ 0, 1 ] ] gap> [[1,2],[3,4]] in G_8; false gap> [[1,8],[8,65]] in G_8; true gap> SL_2:=SL(2,Integers); SL(2,Integers) gap> IsSubgroup(SL_2,G_8); true # doc/cong.xml:128-133 gap> G0_4:=CongruenceSubgroupGamma0(4); # doc/cong.xml:167-172 gap> GU0_2:=CongruenceSubgroupGammaUpper0(2); # doc/cong.xml:206-211 gap> G1_6:=CongruenceSubgroupGamma1(6); # doc/cong.xml:245-250 gap> GU1_4:=CongruenceSubgroupGammaUpper1(4); # doc/cong.xml:279-286 gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4); gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6); # doc/cong.xml:313-322 gap> IsPrincipalCongruenceSubgroup(G_8); true gap> IsPrincipalCongruenceSubgroup(G0_4); false gap> IsPrincipalCongruenceSubgroup(I); true # doc/cong.xml:386-393 gap> IsIntersectionOfCongruenceSubgroups(I); false gap> IsIntersectionOfCongruenceSubgroups(J); true # doc/cong.xml:413-424 gap> LevelOfCongruenceSubgroup(G_8); 8 gap> LevelOfCongruenceSubgroup(G1_6); 6 gap> LevelOfCongruenceSubgroup(I); 4 gap> LevelOfCongruenceSubgroup(J); 12 # doc/cong.xml:435-446 gap> IndexInSL2Z(G_8); 384 gap> G_2:=PrincipalCongruenceSubgroup(2); gap> IndexInSL2Z(G_2); 12 gap> IndexInSL2Z(GU1_4); 12 # doc/cong.xml:462-476 gap> DefiningCongruenceSubgroups(J); [ , ] gap> P:=PrincipalCongruenceSubgroup(6); gap> Q:=PrincipalCongruenceSubgroup(10); gap> G:=IntersectionOfCongruenceSubgroups(Q,P); gap> DefiningCongruenceSubgroups(G); [ ] # doc/cong.xml:503-510 gap> Random(G_2) in G_2; true gap> Random(G_8,2) in G_8; true # doc/cong.xml:522-529 gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2); true gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8); false # doc/cong.xml:551-556 gap> CanEasilyCompareCongruenceSubgroups(G_8,I); false # doc/cong.xml:570-588 gap> IsSubset(G_2,G_8); true gap> IsSubset(G_8,G_2); false gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];; gap> g1:=List(f, t -> t(2));; gap> g2:=List(f, t -> t(4));; gap> for g in g2 do > Print( List( g1, x -> IsSubgroup(x,g) ), "\n"); > od; [ true, true, true, true, true ] [ false, true, false, true, false ] [ false, false, true, false, true ] [ false, false, false, true, false ] [ false, false, false, false, true ] # doc/cong.xml:601-606 gap> Index(G_2,G_8); 32 gap> STOP_TEST("congruence02.tst", 1 ); congruence-1.2.5/tst/testall.g000644 000766 000024 00000000373 14376366031 016315 0ustar00obk1staff000000 000000 LoadPackage( "congruence" ); TestDirectory(DirectoriesPackageLibrary( "congruence", "tst" ), rec(exitGAP := true, testOptions := rec(compareFunction := "uptowhitespace") ) ); FORCE_QUIT_GAP(1); # if we ever get here, there was an error congruence-1.2.5/tst/cong.tst000644 000766 000024 00000053246 14376366031 016166 0ustar00obk1staff000000 000000 gap> G:=PrincipalCongruenceSubgroup(8); gap> IsGroup(G); true gap> IsMatrixGroup(G); true gap> IsPrincipalCongruenceSubgroup(G); true gap> IsFinitelyGeneratedGroup(G); true gap> LevelOfCongruenceSubgroup(G); 8 gap> DimensionOfMatrixGroup(G); 2 gap> MultiplicativeNeutralElement(G); [ [ 1, 0 ], [ 0, 1 ] ] gap> One(G); [ [ 1, 0 ], [ 0, 1 ] ] gap> [[1,2],[3,4]] in G; false gap> [[1,8],[8,65]] in G; true gap> G:=PrincipalCongruenceSubgroup(3); gap> ForAll( List([1..100], k -> Random(G)), m -> m in G); true gap> ForAll( List([1..100], k -> Random(G,10*k)), m -> m in G); true gap> G:=CongruenceSubgroupGamma0(3); gap> ForAll( List([1..100], k -> Random(G)), m -> m in G); true gap> ForAll( List([1..100], k -> Random(G,10*k)), m -> m in G); true gap> G:=CongruenceSubgroupGammaUpper0(3); gap> ForAll( List([1..100], k -> Random(G)), m -> m in G); true gap> ForAll( List([1..100], k -> Random(G,10*k)), m -> m in G); true gap> G:=CongruenceSubgroupGamma1(3); gap> ForAll( List([1..100], k -> Random(G)), m -> m in G); true gap> ForAll( List([1..100], k -> Random(G,10*k)), m -> m in G); true gap> G:=CongruenceSubgroupGammaUpper1(3); gap> ForAll( List([1..100], k -> Random(G)), m -> m in G); true gap> ForAll( List([1..100], k -> Random(G,10*k)), m -> m in G); true gap> G2:=PrincipalCongruenceSubgroup(2); gap> G3:=PrincipalCongruenceSubgroup(3); gap> G6:=PrincipalCongruenceSubgroup(6); gap> G:=SL(2,Integers); SL(2,Integers) gap> IsSubgroup(G,G2); true gap> IsSubgroup(G3,G2); false gap> IsSubgroup(G2,G6); true gap> Index(G,G3); 24 gap> IndexInSL2Z(G6); 144 gap> Index(G3,G6); 6 gap> f:=[PrincipalCongruenceSubgroup, > CongruenceSubgroupGamma1, > CongruenceSubgroupGammaUpper1, > CongruenceSubgroupGamma0, > CongruenceSubgroupGammaUpper0];; gap> g1:=List(f, t -> t(2));; gap> g2:=List(f, t -> t(4));; gap> for g in g2 do > Print( List( g1, x -> IsSubgroup(x,g) ), "\n"); > od; [ true, true, true, true, true ] [ false, true, false, true, false ] [ false, false, true, false, true ] [ false, false, false, true, false ] [ false, false, false, false, true ] gap> Intersection(G2,G3); gap> G6=Intersection(G2,G3); true gap> g1:=List(f, t -> t(2));; gap> g2:=List(f, t -> t(2));; gap> for g in g2 do > Print( List( g1, x -> Intersection(x,g) ), "\n"); > od; [ PrincipalCongruenceSubgroup(2), PrincipalCongruenceSubgroup(2), PrincipalCongruenceSubgroup(2), PrincipalCongruenceSubgroup(2), PrincipalCongruenceSubgroup(2) ] [ PrincipalCongruenceSubgroup(2), CongruenceSubgroupGamma1(2), PrincipalCongruenceSubgroup(2), CongruenceSubgroupGamma1(2), PrincipalCongruenceSubgroup(2) ] [ PrincipalCongruenceSubgroup(2), PrincipalCongruenceSubgroup(2), CongruenceSubgroupGammaUpper1(2), PrincipalCongruenceSubgroup(2), CongruenceSubgroupGammaUpper1(2) ] [ PrincipalCongruenceSubgroup(2), CongruenceSubgroupGamma1(2), PrincipalCongruenceSubgroup(2), CongruenceSubgroupGamma0(2), IntersectionOfCongruenceSubgroups( CongruenceSubgroupGamma0(2), CongruenceSubgroupGammaUpper0(2) ) ] [ PrincipalCongruenceSubgroup(2), PrincipalCongruenceSubgroup(2), CongruenceSubgroupGammaUpper1(2), IntersectionOfCongruenceSubgroups( CongruenceSubgroupGamma0(2), CongruenceSubgroupGammaUpper0(2) ), CongruenceSubgroupGammaUpper0(2) ] gap> G:=Intersection(CongruenceSubgroupGamma0(4),CongruenceSubgroupGamma1(3)); gap> DefiningCongruenceSubgroups(G); [ , ] gap> H:=Intersection(G,CongruenceSubgroupGamma1(4)); gap> DefiningCongruenceSubgroups(H); [ , ] gap> K:=Intersection(H,CongruenceSubgroupGamma0(3)); gap> List([1..6], n -> IndexInSL2Z(PrincipalCongruenceSubgroup(n))); [ 1, 12, 24, 48, 120, 144 ] gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]); [ infinity, 0, 1, 2, infinity ] [ 1, 2, 2, 1 ] gap> GeneralizedFareySequence(fs); [ infinity, 0, 1, 2, infinity ] gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i)); [ -1, 0, 1, 2, 1 ] gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i)); [ 0, 1, 1, 1, 0 ] gap> LabelsOfFareySymbol(fs); [ 1, 2, 2, 1 ] gap> IsValidFareySymbol(fs); true gap> fs:=FareySymbolByData([infinity,0,1,infinity],[1,"even",1]); [ infinity, 0, 1, infinity ] [ 1, "even", 1 ] gap> Print(fs); Print("\n"); FareySymbolByData( [ infinity, 0, 1, infinity ], [ 1, "even", 1 ] ] gap> SetInfoLevel(InfoCongruence,1); gap> fs1_1:=FareySymbolByData([infinity,0,infinity],["even","odd"]);; gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> fs2_1:=FareySymbolByData([infinity,0,infinity],["odd","odd"]);; gap> GeneratorsByFareySymbol(last); [ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> fs2_2:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] gap> fs2_3:=FareySymbolByData([infinity,0,1,infinity],[1,"even",1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ] ] gap> fs3_1:=FareySymbolByData([infinity,0,1,infinity],["even","even","even"]);; gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 1, -2 ], [ 1, -1 ] ] ] gap> fs3_2:=FareySymbolByData([infinity,0,1,2,infinity],["even",1,"even",1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 3, -1 ], [ 1, 0 ] ], [ [ 3, -5 ], [ 2, -3 ] ] ] gap> fs3_3:=FareySymbolByData([infinity,0,1,2,5/2,3,infinity],[1,2,3,3,2,1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 3 ], [ 0, 1 ] ], [ [ 8, -3 ], [ 3, -1 ] ], [ [ 7, -12 ], [ 3, -5 ] ] ] gap> fs3_4:=FareySymbolByData([infinity,0,1,infinity],[1,"odd",1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 3, -2 ] ] ] gap> fs4_1:=FareySymbolByData([infinity,0,1/2,1,3/2,2,infinity],[1,2,3,3,2,1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 7, -2 ], [ 4, -1 ] ], [ [ 5, -4 ], [ 4, -3 ] ] ] gap> fs4_2:=FareySymbolByData([infinity,0,1/2,1,3/2,2,5/2,3,7/2,4,infinity],[1,4,5,5,3,3,2,2,4,1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 4 ], [ 0, 1 ] ], [ [ 15, -4 ], [ 4, -1 ] ], [ [ 5, -4 ], [ 4, -3 ] ], [ [ 9, -16 ], [ 4, -7 ] ], [ [ 13, -36 ], [ 4, -11 ] ] ] gap> fs4_4:=FareySymbolByData([infinity,0,1/2,1,infinity],[1,2,2,1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 3, -1 ], [ 4, -1 ] ] ] gap> fs4_5:=FareySymbolByData([infinity,0,1,2,infinity],[1,"even","even",1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 3, -5 ], [ 2, -3 ] ] ] gap> fs4_6:=FareySymbolByData([infinity,0,1,2,3,4,infinity],[1,"even",2,"even",2,1]);; gap> GeneratorsByFareySymbol(last); [ [ [ 1, 4 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 7, -11 ], [ 2, -3 ] ], [ [ 5, -13 ], [ 2, -5 ] ] ] gap> fs4_7:=FareySymbolByData([infinity,0,1,infinity],["odd","even","even"]);; gap> GeneratorsByFareySymbol(last); [ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 1, -2 ], [ 1, -1 ] ] ] gap> fs5_1:=FareySymbolByData([infinity,0,1,2,3,infinity],[1,"even","even",1,"odd"]);; gap> GeneratorsByFareySymbol(last); [ [ [ 3, 2 ], [ 1, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 3, -5 ], [ 2, -3 ] ], [ [ 3, -13 ], [ 1, -4 ] ] ] gap> fs5_2:=FareySymbolByData([infinity,0,1/2,1,4/3,3/2,2,3,infinity],[1,2,3,3,"odd",2,1,"odd"]);; gap> GeneratorsByFareySymbol(last); [ [ [ 3, 2 ], [ 1, 1 ] ], [ [ 7, -2 ], [ 4, -1 ] ], [ [ 6, -5 ], [ 5, -4 ] ], [ [ 26, -37 ], [ 19, -27 ] ], [ [ 3, -13 ], [ 1, -4 ] ] ] gap> fs5_3:=FareySymbolByData([infinity,0,1/2,1,4/3,7/5,3/2,2,7/3,12/5,5/2,3,10/3,17/5,7/2,4, > 13/3,22/5,9/2,23/5,14/3,5,infinity], > [1,2,6,6,10,11,5,5,11,9,4,4,9,8,3,3,8,7,7,10,2,1]); [ infinity, 0, 1/2, 1, 4/3, 7/5, 3/2, 2, 7/3, 12/5, 5/2, 3, 10/3, 17/5, 7/2, 4, 13/3, 22/5, 9/2, 23/5, 14/3, 5, infinity ] [ 1, 2, 6, 6, 10, 11, 5, 5, 11, 9, 4, 4, 9, 8, 3, 3, 8, 7, 7, 10, 2, 1 ] gap> GeneratorsByFareySymbol(fs5_3); [ [ [ 1, 5 ], [ 0, 1 ] ], [ [ 24, -5 ], [ 5, -1 ] ], [ [ 6, -5 ], [ 5, -4 ] ], [ [ 139, -190 ], [ 30, -41 ] ], [ [ 59, -85 ], [ 25, -36 ] ], [ [ 11, -20 ], [ 5, -9 ] ], [ [ 84, -205 ], [ 25, -61 ] ], [ [ 16, -45 ], [ 5, -14 ] ], [ [ 109, -375 ], [ 25, -86 ] ], [ [ 21, -80 ], [ 5, -19 ] ], [ [ 91, -405 ], [ 20, -89 ] ] ] gap> fs11_1:=FareySymbolByData([infinity,-1,0,1,2,infinity],["even","odd","odd","even","even"]); [ infinity, -1, 0, 1, 2, infinity ] [ "even", "odd", "odd", "even", "even" ] gap> GeneratorsByFareySymbol(last); [ [ [ -1, -2 ], [ 1, 1 ] ], [ [ -2, -1 ], [ 3, 1 ] ], [ [ 1, -1 ], [ 3, -2 ] ], [ [ 3, -5 ], [ 2, -3 ] ], [ [ 2, -5 ], [ 1, -2 ] ] ] gap> fs11_2:=FareySymbolByData([infinity,0,1,2,3,infinity],["even","even","odd","odd","even"]); [ infinity, 0, 1, 2, 3, infinity ] [ "even", "even", "odd", "odd", "even" ] gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 4, -7 ], [ 3, -5 ] ], [ [ 7, -19 ], [ 3, -8 ] ], [ [ 3, -10 ], [ 1, -3 ] ] ] gap> fs12_1:=FareySymbolByData([infinity,0,1/6,1/5,1/4,1/3,1/2,3/5,2/3,1,4/3,7/5,3/2,5/3,7/4,9/5,11/6,2,infinity], > [ 1,8, 9, 7, 4, 4, 7, 6, 2,2, 6, 5, 3, 3, 5, 9, 8,1]); [ infinity, 0, 1/6, 1/5, 1/4, 1/3, 1/2, 3/5, 2/3, 1, 4/3, 7/5, 3/2, 5/3, 7/4, 9/5, 11/6, 2, infinity ] [ 1, 8, 9, 7, 4, 4, 7, 6, 2, 2, 6, 5, 3, 3, 5, 9, 8, 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 23, -2 ], [ 12, -1 ] ], [ [ 109, -20 ], [ 60, -11 ] ], [ [ 17, -4 ], [ 30, -7 ] ], [ [ 7, -2 ], [ 18, -5 ] ], [ [ 41, -26 ], [ 30, -19 ] ], [ [ 7, -6 ], [ 6, -5 ] ], [ [ 53, -76 ], [ 30, -43 ] ], [ [ 31, -50 ], [ 18, -29 ] ] ] gap> fs12_2:=FareySymbolByData([infinity,0,1,2,3,4,infinity],[1,"odd","odd","odd","odd",1]); [ infinity, 0, 1, 2, 3, 4, infinity ] [ 1, "odd", "odd", "odd", "odd", 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 4 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 3, -2 ] ], [ [ 4, -7 ], [ 3, -5 ] ], [ [ 7, -19 ], [ 3, -8 ] ], [ [ 10, -37 ], [ 3, -11 ] ] ] gap> fs12_3:=FareySymbolByData([infinity,0,1,5/4,4/3,3/2,5/3,2,7/3,5/2,8/3,11/4,14/5,3,infinity], > [1,"even",5,4,3,3,"even","even",2,2,4,5,"even",1]); [ infinity, 0, 1, 5/4, 4/3, 3/2, 5/3, 2, 7/3, 5/2, 8/3, 11/4, 14/5, 3, infinity ] [ 1, "even", 5, 4, 3, 3, "even", "even", 2, 2, 4, 5, "even", 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 3 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 67, -81 ], [ 24, -29 ] ], [ [ 65, -84 ], [ 24, -31 ] ], [ [ 19, -27 ], [ 12, -17 ] ], [ [ 17, -29 ], [ 10, -17 ] ], [ [ 23, -53 ], [ 10, -23 ] ], [ [ 31, -75 ], [ 12, -29 ] ], [ [ 73, -205 ], [ 26, -73 ] ] ] gap> fs12_4:=FareySymbolByData([infinity,0,1/3,1/2,2/3,1,2,3,10/3,7/2,11/3,4,5,6,infinity], > [1,"even",3,2,"even","even","even","even",2,3,"even","even","even",1]); [ infinity, 0, 1/3, 1/2, 2/3, 1, 2, 3, 10/3, 7/2, 11/3, 4, 5, 6, infinity ] [ 1, "even", 3, 2, "even", "even", "even", "even", 2, 3, "even", "even", "even", 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 6 ], [ 0, 1 ] ], [ [ 3, -1 ], [ 10, -3 ] ], [ [ 43, -18 ], [ 12, -5 ] ], [ [ 41, -24 ], [ 12, -7 ] ], [ [ 7, -5 ], [ 10, -7 ] ], [ [ 3, -5 ], [ 2, -3 ] ], [ [ 5, -13 ], [ 2, -5 ] ], [ [ 33, -109 ], [ 10, -33 ] ], [ [ 37, -137 ], [ 10, -37 ] ], [ [ 9, -41 ], [ 2, -9 ] ], [ [ 11, -61 ], [ 2, -11 ] ] ] gap> fs12_5:=FareySymbolByData([infinity,0,1/3,2/5,1/2,1,4/3,3/2,2,3,infinity], > ["even",1,"even","even","even","even",1,"even","even","even"]); [ infinity, 0, 1/3, 2/5, 1/2, 1, 4/3, 3/2, 2, 3, infinity ] [ "even", 1, "even", "even", "even", "even", 1, "even", "even", "even" ] gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 13, -3 ], [ 9, -2 ] ], [ [ 13, -5 ], [ 34, -13 ] ], [ [ 12, -5 ], [ 29, -12 ] ], [ [ 3, -2 ], [ 5, -3 ] ], [ [ 13, -17 ], [ 10, -13 ] ], [ [ 8, -13 ], [ 5, -8 ] ], [ [ 5, -13 ], [ 2, -5 ] ], [ [ 3, -10 ], [ 1, -3 ] ] ] gap> fs12_6:=FareySymbolByData([infinity,0,1,4/3,3/2,5/3,2,3,infinity], > [1,"even","even",2,2,"even","even",1]); [ infinity, 0, 1, 4/3, 3/2, 5/3, 2, 3, infinity ] [ 1, "even", "even", 2, 2, "even", "even", 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 3 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 13, -17 ], [ 10, -13 ] ], [ [ 19, -27 ], [ 12, -17 ] ], [ [ 17, -29 ], [ 10, -17 ] ], [ [ 5, -13 ], [ 2, -5 ] ] ] gap> fs12_7:=FareySymbolByData([infinity,0,1,2,3,4,5,6,infinity], > [1,"even","even","even","even","even","even",1]); [ infinity, 0, 1, 2, 3, 4, 5, 6, infinity ] [ 1, "even", "even", "even", "even", "even", "even", 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 6 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 3, -5 ], [ 2, -3 ] ], [ [ 5, -13 ], [ 2, -5 ] ], [ [ 7, -25 ], [ 2, -7 ] ], [ [ 9, -41 ], [ 2, -9 ] ], [ [ 11, -61 ], [ 2, -11 ] ] ] gap> fs12_8:=FareySymbolByData([infinity,0,1,3/2,2,3,infinity], > ["even","even","even","even","even","even"]); [ infinity, 0, 1, 3/2, 2, 3, infinity ] [ "even", "even", "even", "even", "even", "even" ] gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 1, -1 ], [ 2, -1 ] ], [ [ 7, -10 ], [ 5, -7 ] ], [ [ 8, -13 ], [ 5, -8 ] ], [ [ 5, -13 ], [ 2, -5 ] ], [ [ 3, -10 ], [ 1, -3 ] ] ] gap> fs12_9:=FareySymbolByData([infinity,0,1/4,1/3,1/2,2/3,3/4,4/5,5/6,1,infinity], > [1,4,3,2,2,3,4,5,5,1]); [ infinity, 0, 1/4, 1/3, 1/2, 2/3, 3/4, 4/5, 5/6, 1, infinity ] [ 1, 4, 3, 2, 2, 3, 4, 5, 5, 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 19, -4 ], [ 24, -5 ] ], [ [ 17, -5 ], [ 24, -7 ] ], [ [ 7, -3 ], [ 12, -5 ] ], [ [ 31, -25 ], [ 36, -29 ] ] ] gap> fs12_10:=FareySymbolByData([infinity,0,1/6,1/5,1/4,2/7,1/3,2/5,1/2,4/7,7/12,3/5,2/3,5/7,3/4,4/5,5/6,1,infinity], > [1,2,3,7,7,8,8,6,6,9,9,4,4,5,5,3,2,1]); [ infinity, 0, 1/6, 1/5, 1/4, 2/7, 1/3, 2/5, 1/2, 4/7, 7/12, 3/5, 2/3, 5/7, 3/4, 4/5, 5/6, 1, infinity ] [ 1, 2, 3, 7, 7, 8, 8, 6, 6, 9, 9, 4, 4, 5, 5, 3, 2, 1 ] gap> GeneratorsByFareySymbol(last); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 11, -1 ], [ 12, -1 ] ], [ [ 49, -9 ], [ 60, -11 ] ], [ [ 13, -3 ], [ 48, -11 ] ], [ [ 13, -4 ], [ 36, -11 ] ], [ [ 13, -6 ], [ 24, -11 ] ], [ [ 85, -49 ], [ 144, -83 ] ], [ [ 25, -16 ], [ 36, -23 ] ], [ [ 37, -27 ], [ 48, -35 ] ] ] gap> G:=CongruenceSubgroupGamma0(20); gap> fs:=FareySymbol(G); [ infinity, 0, 1/5, 1/4, 2/7, 3/10, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1, infinity ] [ 1, 3, 4, 6, 7, 7, 5, 2, 2, 3, 6, 4, 5, 1 ] gap> G:=PrincipalCongruenceSubgroup(2); gap> FareySymbol(G); [ infinity, 0, 1, 2, infinity ] [ 2, 1, 1, 2 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] gap> G:=CongruenceSubgroupGamma0(2); gap> FareySymbol(G); [ infinity, 0, 1, infinity ] [ 1, "even", 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 2, -1 ] ] ] gap> G:=CongruenceSubgroupGamma0(3); gap> FareySymbol(G); [ infinity, 0, 1, infinity ] [ 1, "odd", 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 1, -1 ], [ 3, -2 ] ] ] gap> G:=PrincipalCongruenceSubgroup(4); gap> FareySymbol(G); [ infinity, 0, 1/2, 1, 3/2, 2, 5/2, 3, 7/2, 4, infinity ] [ 1, 5, 2, 2, 3, 3, 4, 4, 5, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 4 ], [ 0, 1 ] ], [ [ -15, 4 ], [ -4, 1 ] ], [ [ 5, -4 ], [ 4, -3 ] ], [ [ 9, -16 ], [ 4, -7 ] ], [ [ 13, -36 ], [ 4, -11 ] ] ] gap> G:=CongruenceSubgroupGamma0(4); gap> FareySymbol(G); [ infinity, 0, 1/2, 1, infinity ] [ 1, 2, 2, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 3, -1 ], [ 4, -1 ] ] ] gap> G:=CongruenceSubgroupGamma0(5); gap> FareySymbol(G); [ infinity, 0, 1/2, 1, infinity ] [ 1, "even", "even", 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> G:=CongruenceSubgroupGamma0(6); gap> FareySymbol(G); [ infinity, 0, 1/3, 1/2, 2/3, 1, infinity ] [ 1, 3, 2, 2, 3, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 5, -1 ], [ 6, -1 ] ], [ [ 7, -3 ], [ 12, -5 ] ] ] gap> G:=CongruenceSubgroupGamma0(7); gap> FareySymbol(G); [ infinity, 0, 1/2, 1, infinity ] [ 1, "odd", "odd", 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 7, -3 ] ], [ [ 4, -3 ], [ 7, -5 ] ] ] gap> G:=CongruenceSubgroupGamma0(9); gap> FareySymbol(G); [ infinity, 0, 1/3, 1/2, 2/3, 1, infinity ] [ 1, 2, 2, 3, 3, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 4, -1 ], [ 9, -2 ] ], [ [ 7, -4 ], [ 9, -5 ] ] ] gap> G:=CongruenceSubgroupGamma0(10); gap> FareySymbol(G); [ infinity, 0, 1/3, 2/5, 1/2, 3/5, 2/3, 1, infinity ] [ 1, "even", 3, 2, 2, 3, "even", 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 3, -1 ], [ 10, -3 ] ], [ [ 19, -7 ], [ 30, -11 ] ], [ [ 11, -5 ], [ 20, -9 ] ], [ [ 7, -5 ], [ 10, -7 ] ] ] gap> G:=CongruenceSubgroupGamma0(13); gap> FareySymbol(G); [ infinity, 0, 1/3, 1/2, 2/3, 1, infinity ] [ 1, "odd", "even", "even", "odd", 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 3, -1 ], [ 13, -4 ] ], [ [ 5, -2 ], [ 13, -5 ] ], [ [ 8, -5 ], [ 13, -8 ] ], [ [ 9, -7 ], [ 13, -10 ] ] ] gap> G:=CongruenceSubgroupGamma0(18); gap> FareySymbol(G); [ infinity, 0, 1/6, 1/5, 2/9, 1/4, 1/3, 1/2, 2/3, 3/4, 7/9, 4/5, 5/6, 1, infinity ] [ 1, 4, 4, 7, 6, 2, 2, 3, 3, 6, 7, 5, 5, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 7, -1 ], [ 36, -5 ] ], [ [ 71, -15 ], [ 90, -19 ] ], [ [ 55, -13 ], [ 72, -17 ] ], [ [ 7, -2 ], [ 18, -5 ] ], [ [ 13, -8 ], [ 18, -11 ] ], [ [ 31, -25 ], [ 36, -29 ] ] ] gap> G:=CongruenceSubgroupGamma0(25); gap> FareySymbol(G); [ infinity, 0, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1, infinity ] [ 1, 2, 2, "even", 3, 3, 4, 4, "even", 5, 5, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 6, -1 ], [ 25, -4 ] ], [ [ 7, -2 ], [ 25, -7 ] ], [ [ 11, -4 ], [ 25, -9 ] ], [ [ 16, -9 ], [ 25, -14 ] ], [ [ 18, -13 ], [ 25, -18 ] ], [ [ 21, -16 ], [ 25, -19 ] ] ] gap> G:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(4)); gap> FareySymbol(G); [ infinity, 0, 1/2, 1, 3/2, 2, infinity ] [ 1, 3, 2, 2, 3, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 7, -2 ], [ 4, -1 ] ], [ [ 5, -4 ], [ 4, -3 ] ] ] gap> G:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(3)); gap> FareySymbol(G); [ infinity, 0, 1/3, 1/2, 2/3, 1, 4/3, 3/2, 5/3, 2, infinity ] [ 1, 5, 4, 3, 2, 2, 3, 4, 5, 1 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 11, -2 ], [ 6, -1 ] ], [ [ 19, -8 ], [ 12, -5 ] ], [ [ 17, -10 ], [ 12, -7 ] ], [ [ 7, -6 ], [ 6, -5 ] ] ] gap> G16:=CongruenceSubgroupGamma0(16);; gap> FS16:=FareySymbol(G16);; gap> gens:=GeneratorsByFareySymbol(FS16);; gap> glue_list:=__congruence_gluing_matrices(FS16); [ 1, 2, -2, 3, -3, 4, -4, 5, -5, -1 ] gap> for i in [1..1000] do > g:=Random(G16); > w:=__congruence_FactorizeMat( G16, g ); > h:=__congruence_CheckFactorizeMat(gens,w); > if g<>h and g<>-h then > Print("Error:", g, " is not plus/minus ", h , "\n"); > fi; > od;congruence-1.2.5/doc/manual.six000644 000766 000024 00000023104 14376366051 016431 0ustar00obk1staff000000 000000 #SIXFORMAT GapDocGAP HELPBOOKINFOSIXTMP := rec( encoding := "UTF-8", bookname := "Congruence", entries := [ [ "Title page", ".", [ 0, 0, 0 ], 1, 1, "title page", "X7D2C85EC87DD46E5" ], [ "Abstract", ".-1", [ 0, 0, 1 ], 59, 2, "abstract", "X7AA6C5737B711C89" ], [ "Copyright", ".-2", [ 0, 0, 2 ], 65, 2, "copyright", "X81488B807F2A1CF1" ] , [ "Acknowledgements", ".-3", [ 0, 0, 3 ], 87, 2, "acknowledgements", "X82A988D47DFAFCFA" ], [ "Table of Contents", ".-4", [ 0, 0, 4 ], 95, 3, "table of contents", "X8537FEB07AF2BEC8" ], [ "\033[1X\033[33X\033[0;-2YIntroduction\033[133X\033[101X", "1", [ 1, 0, 0 ], 1, 4, "introduction", "X7DFB63A97E67C0A1" ], [ "\033[1X\033[33X\033[0;-2YGeneral aims of \033[5XCongruence\033[105X\033[10\ 1X\027\033[1X\027 package\033[133X\033[101X", "1.1", [ 1, 1, 0 ], 4, 4, "general aims of congruence package", "X80AE633F82C4D9BF" ], [ "\033[1X\033[33X\033[0;-2YInstallation and system requirements\033[133X\\ 033[101X", "1.2", [ 1, 2, 0 ], 24, 4, "installation and system requirements", "X7DB566D5785B7DBC" ], [ "\033[1X\033[33X\033[0;-2YConstruction of congruence subgroups\033[133X\\ 033[101X", "2", [ 2, 0, 0 ], 1, 5, "construction of congruence subgroups", "X7B010EE67FACF45E" ], [ "\033[1X\033[33X\033[0;-2YConstruction of congruence subgroups\033[133X\\ 033[101X", "2.1", [ 2, 1, 0 ], 34, 5, "construction of congruence subgroups", "X7B010EE67FACF45E" ], [ "\033[1X\033[33X\033[0;-2YProperties of congruence subgroups\033[133X\033[1\ 01X", "2.2", [ 2, 2, 0 ], 187, 8, "properties of congruence subgroups", "X8267F261874959E5" ], [ "\033[1X\033[33X\033[0;-2YAttributes of congruence subgroups\033[133X\033[1\ 01X", "2.3", [ 2, 3, 0 ], 265, 9, "attributes of congruence subgroups", "X8664A60E875EA5DE" ], [ "\033[1X\033[33X\033[0;-2YOperations for congruence subgroups\033[133X\033[\ 101X", "2.4", [ 2, 4, 0 ], 335, 11, "operations for congruence subgroups", "X7B15B49583DC9EF5" ], [ "\033[1X\033[33X\033[0;-2YFarey symbols and their properties\033[133X\033[1\ 01X", "3", [ 3, 0, 0 ], 1, 13, "farey symbols and their properties", "X85CABB30818CD99C" ], [ "\033[1X\033[33X\033[0;-2YConstruction of Farey symbols\033[133X\033[101X" , "3.1", [ 3, 1, 0 ], 41, 13, "construction of farey symbols", "X7B7B81E584CCA30C" ], [ "\033[1X\033[33X\033[0;-2YProperties of Farey symbols\033[133X\033[101X", "3.2", [ 3, 2, 0 ], 75, 14, "properties of farey symbols", "X8016C45082AEC784" ], [ "\033[1X\033[33X\033[0;-2YFarey symbols for congruence subgroups\033[133X\\ 033[101X", "4", [ 4, 0, 0 ], 1, 16, "farey symbols for congruence subgroups", "X831C60277F7D80B2" ], [ "\033[1X\033[33X\033[0;-2YComputation of the Farey symbol for a finite inde\ x subgroup\033[133X\033[101X", "4.1", [ 4, 1, 0 ], 15, 16, "computation of the farey symbol for a finite index subgroup", "X7F43DB8B803F313F" ], [ "\033[1X\033[33X\033[0;-2YComputation of generators of a finite index subgr\ oup from its Farey symbol\033[133X\033[101X", "4.2", [ 4, 2, 0 ], 46, 17, "computation of generators of a finite index subgroup from its farey sym\ bol", "X80AE179D869BEE90" ], [ "\033[1X\033[33X\033[0;-2YOther properties derived from Farey symbols\033[1\ 33X\033[101X", "4.3", [ 4, 3, 0 ], 178, 19, "other properties derived from farey symbols", "X7C5AB1D786207745" ], [ "\033[1X\033[33X\033[0;-2YService functions of the \033[5XCongruence\033[10\ 5X\033[101X\027\033[1X\027 package\033[133X\033[101X", "5", [ 5, 0, 0 ], 1, 20, "service functions of the congruence package", "X82C56A367A418E7C" ] , [ "\033[1X\033[33X\033[0;-2YAdditional information displayed by \033[5XCongru\ ence\033[105X\033[101X\027\033[1X\027 algorithms\033[133X\033[101X", "5.1", [ 5, 1, 0 ], 4, 20, "additional information displayed by congruence algorithms", "X86D04EE08437C320" ], [ "Bibliography", "bib", [ "Bib", 0, 0 ], 1, 21, "bibliography", "X7A6F98FD85F02BFE" ], [ "References", "bib", [ "Bib", 0, 0 ], 1, 21, "references", "X7A6F98FD85F02BFE" ], [ "Index", "ind", [ "Ind", 0, 0 ], 1, 22, "index", "X83A0356F839C696F" ], [ "\033[5XCongruence\033[105X package", ".-1", [ 0, 0, 1 ], 59, 2, "congruence package", "X7AA6C5737B711C89" ], [ "\033[10XIsCongruenceSubgroup\033[110X", "1.1", [ 1, 1, 0 ], 4, 4, "iscongruencesubgroup", "X80AE633F82C4D9BF" ], [ "\033[10XIsCongruenceSubgroup\033[110X", "2.", [ 2, 0, 0 ], 1, 5, "iscongruencesubgroup", "X7B010EE67FACF45E" ], [ "\033[2XPrincipalCongruenceSubgroup\033[102X", "2.1-1", [ 2, 1, 1 ], 37, 5, "principalcongruencesubgroup", "X7A61F693873F7136" ], [ "\033[2XCongruenceSubgroupGamma0\033[102X", "2.1-2", [ 2, 1, 2 ], 76, 6, "congruencesubgroupgamma0", "X7B8DB77B81BE58D7" ], [ "\033[2XCongruenceSubgroupGammaUpper0\033[102X", "2.1-3", [ 2, 1, 3 ], 97, 7, "congruencesubgroupgammaupper0", "X7B4FBED17ECE2A7F" ], [ "\033[2XCongruenceSubgroupGamma1\033[102X", "2.1-4", [ 2, 1, 4 ], 118, 7, "congruencesubgroupgamma1", "X7CFDC47279AC0E85" ], [ "\033[2XCongruenceSubgroupGammaUpper1\033[102X", "2.1-5", [ 2, 1, 5 ], 139, 7, "congruencesubgroupgammaupper1", "X7C3FCDD878FE57ED" ], [ "\033[2XIntersectionOfCongruenceSubgroups\033[102X", "2.1-6", [ 2, 1, 6 ], 160, 8, "intersectionofcongruencesubgroups", "X7FE839377D7F45EB" ], [ "\033[2XIntersection\033[102X", "2.1-6", [ 2, 1, 6 ], 160, 8, "intersection", "X7FE839377D7F45EB" ], [ "\033[2XIsPrincipalCongruenceSubgroup\033[102X", "2.2-1", [ 2, 2, 1 ], 196, 8, "isprincipalcongruencesubgroup", "X828F7E08787650DC" ], [ "\033[2XIsCongruenceSubgroupGamma0\033[102X", "2.2-2", [ 2, 2, 2 ], 215, 8, "iscongruencesubgroupgamma0", "X85124A697E826AB4" ], [ "\033[2XIsCongruenceSubgroupGammaUpper0\033[102X", "2.2-3", [ 2, 2, 3 ], 223, 9, "iscongruencesubgroupgammaupper0", "X7A03633C83A286F5" ], [ "\033[2XIsCongruenceSubgroupGamma1\033[102X", "2.2-4", [ 2, 2, 4 ], 231, 9, "iscongruencesubgroupgamma1", "X8262396080F3B0DD" ], [ "\033[2XIsCongruenceSubgroupGammaUpper1\033[102X", "2.2-5", [ 2, 2, 5 ], 239, 9, "iscongruencesubgroupgammaupper1", "X7D731035834CF878" ], [ "\033[2XIsIntersectionOfCongruenceSubgroups\033[102X", "2.2-6", [ 2, 2, 6 ], 247, 9, "isintersectionofcongruencesubgroups", "X83B4E4FA7F4DFB97" ], [ "\033[2XLevelOfCongruenceSubgroup\033[102X", "2.3-1", [ 2, 3, 1 ], 270, 10, "levelofcongruencesubgroup", "X7D5696F584970D21" ], [ "\033[2XIndexInSL2Z\033[102X", "2.3-2", [ 2, 3, 2 ], 291, 10, "indexinsl2z", "X87302F8A7E44D67B" ], [ "\033[2XDefiningCongruenceSubgroups\033[102X", "2.3-3", [ 2, 3, 3 ], 310, 10, "definingcongruencesubgroups", "X7BF57D157824FFC8" ], [ "\033[2XRandom\033[102X one and two argument versions", "2.4-1", [ 2, 4, 1 ], 341, 11, "random one and two argument versions", "X8146AC8587C65DEE" ], [ "\033[2XRandom\033[102X", "2.4-1", [ 2, 4, 1 ], 341, 11, "random", "X8146AC8587C65DEE" ], [ "\033[2X\\in\033[102X", "2.4-2", [ 2, 4, 2 ], 359, 11, "in", "X87BDB89B7AAFE8AD" ], [ "\033[2XCanEasilyCompareCongruenceSubgroups\033[102X", "2.4-3", [ 2, 4, 3 ], 375, 11, "caneasilycomparecongruencesubgroups", "X7FC5BF527931FF4C" ], [ "\033[2XIsSubset\033[102X", "2.4-4", [ 2, 4, 4 ], 394, 12, "issubset", "X79CA175481F8105F" ], [ "\033[2XIndex\033[102X", "2.4-5", [ 2, 4, 5 ], 422, 12, "index", "X83A0356F839C696F" ], [ "\033[10XIsFareySymbol\033[110X", "3.", [ 3, 0, 0 ], 1, 13, "isfareysymbol", "X85CABB30818CD99C" ], [ "\033[10XIsFareySymbolDefaultRep\033[110X", "3.", [ 3, 0, 0 ], 1, 13, "isfareysymboldefaultrep", "X85CABB30818CD99C" ], [ "\033[2XFareySymbolByData\033[102X", "3.1-1", [ 3, 1, 1 ], 44, 13, "fareysymbolbydata", "X7F8F5919870A46FE" ], [ "\033[2XIsValidFareySymbol\033[102X", "3.1-2", [ 3, 1, 2 ], 62, 14, "isvalidfareysymbol", "X845F9BA182F4E73B" ], [ "\033[2XGeneralizedFareySequence\033[102X", "3.2-1", [ 3, 2, 1 ], 78, 14, "generalizedfareysequence", "X8245766978F02751" ], [ "\033[2XNumeratorOfGFSElement\033[102X", "3.2-2", [ 3, 2, 2 ], 91, 14, "numeratorofgfselement", "X80BB58E58492D103" ], [ "\033[2XDenominatorOfGFSElement\033[102X", "3.2-3", [ 3, 2, 3 ], 107, 14, "denominatorofgfselement", "X87477604878BCD42" ], [ "\033[2XLabelsOfFareySymbol\033[102X", "3.2-4", [ 3, 2, 4 ], 123, 15, "labelsoffareysymbol", "X83C941047D486000" ], [ "\033[2XFareySymbol\033[102X", "4.1-1", [ 4, 1, 1 ], 18, 16, "fareysymbol", "X8594896287DCFE8D" ], [ "\033[2XMatrixByEvenInterval\033[102X", "4.2-1", [ 4, 2, 1 ], 70, 17, "matrixbyeveninterval", "X8790C1498107A39A" ], [ "\033[2XMatrixByOddInterval\033[102X", "4.2-2", [ 4, 2, 2 ], 91, 17, "matrixbyoddinterval", "X78779BDF7A1DB4AE" ], [ "\033[2XMatrixByFreePairOfIntervals\033[102X", "4.2-3", [ 4, 2, 3 ], 108, 18, "matrixbyfreepairofintervals", "X7F792846795E3A63" ], [ "\033[2XGeneratorsByFareySymbol\033[102X", "4.2-4", [ 4, 2, 4 ], 124, 18, "generatorsbyfareysymbol", "X7905B050800E4416" ], [ "\033[2XGeneratorsOfGroup\033[102X", "4.2-5", [ 4, 2, 5 ], 144, 18, "generatorsofgroup", "X79C44528864044C5" ], [ "\033[2XIndexInPSL2ZByFareySymbol\033[102X", "4.3-1", [ 4, 3, 1 ], 181, 19, "indexinpsl2zbyfareysymbol", "X80EED34183408106" ], [ "\033[2XInfoCongruence\033[102X", "5.1-1", [ 5, 1, 1 ], 7, 20, "infocongruence", "X83B2A8607C2E6A38" ] ] ); congruence-1.2.5/doc/chapBib_mj.html000644 000766 000024 00000010635 14376366051 017340 0ustar00obk1staff000000 000000 GAP (Congruence) - References
Goto Chapter: Top 1 2 3 4 5 Bib Ind

References

[CLLT93] Chan, S.-P., Lang, M.-L., Lim, C.-H. and Tan, S. P., Special polygons for subgroups of the modular group and applications, Internat. J. Math., 4 (1) (1993), 11--34.

[Kul91] Kulkarni, R. S., An arithmetic-geometric method in the study of the subgroups of the modular group, Amer. J. Math., 113 (6) (1991), 1053--1133.

[LLT95a] Lang, M.-L., Lim, C.-H. and Tan, S. P., An algorithm for determining if a subgroup of the modular group is congruence, J. London Math. Soc. (2), 51 (3) (1995), 491--502.

[LLT95b] Lang, M.-L., Lim, C.-H. and Tan, S. P., Independent generators for congruence subgroups of Hecke groups, Math. Z., 220 (4) (1995), 569--594.

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap0_mj.html000644 000766 000024 00000035102 14376366051 016777 0ustar00obk1staff000000 000000 GAP (Congruence) - Contents
Goto Chapter: Top 1 2 3 4 5 Bib Ind

Congruence

Congruence subgroups of \(SL_2(ℤ)\)

Version 1.2.5

25 February 2023

Ann Dooms
Email: andooms@vub.ac.be
Homepage: http://homepages.vub.ac.be/~andooms
Address:
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium

Eric Jespers
Email: efjesper@vub.ac.be
Homepage: http://homepages.vub.ac.be/~efjesper
Address:
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium

Olexandr Konovalov
Email: obk1@st-andrews.ac.uk
Homepage: https://alex-konovalov.github.io/
Address:
School of Computer Science
University of St Andrews
Jack Cole Building, North Haugh,
St Andrews, Fife, KY16 9SX, Scotland

Helena Verrill
Email: verrill@math.lsu.edu
Homepage: http://www.math.lsu.edu/~verrill/
Address:
Department of Mathematics
Louisiana State University
Baton Rouge, Louisiana, 70803-4918
USA

Abstract

The GAP package Congruence provides functionality to work with congruence subgroups of \(SL_2(ℤ)\).

Copyright

© 2006-2023 by Ann Dooms, Eric Jespers, Olexandr Konovalov and Helena Verrill.

Congruence 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. For details, see the FSF's own site https://www.gnu.org/licenses/gpl.html.

If you obtained Congruence, we would be grateful for a short notification sent to one of the authors.

If you publish a result which was partially obtained with the usage of Congruence, please cite it in the following form:

A. Dooms, E. Jespers, O. Konovalov and H. Verrill. Congruence --- Congruence subgroups of \(SL_2(ℤ)\), Version 1.2.5; 2023 (https://gap-packages.github.io/congruence/).

Acknowledgements

We are very grateful to Mong-Lung Lang, Chong-Hai Lim and Ser Peow Tan for their comments provided while implementing algorithms from [LLT95a] and [LLT95b], and to Francqui Stichting (Belgium) for the support of the third author.

Contents


Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap2.html000644 000766 000024 00000100415 14376366051 016313 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 2: Construction of congruence subgroups
Goto Chapter: Top 1 2 3 4 5 Bib Ind

2 Construction of congruence subgroups

The package Congruence provides functions to construct several types of canonical congruence subgroups in SL_2(ℤ), and also intersections of a finite number of such subgroups. They will return a matrix group in the category IsCongruenceSubgroup, which is defined as a subcategory of IsMatrixGroup, and which will have a distinguishing property determining whether it is a congruence subgroup of one of the canonical types, or an intersection of such congruence subgroups (if it can not be reduced to one of the canonical congruence subgroups). To start to work with the package, you need first to load it as follows:


gap> LoadPackage("congruence");
-----------------------------------------------------------------------------
Loading  Congruence 1.2.4 (Congruence subgroups of SL(2,Integers))
by Ann Dooms (http://homepages.vub.ac.be/~andooms),
   Eric Jespers (http://homepages.vub.ac.be/~efjesper),
   Olexandr Konovalov (https://alex-konovalov.github.io/), and
   Helena Verrill (http://www.math.lsu.edu/~verrill).
maintained by:
   Ann Dooms (http://homepages.vub.ac.be/~andooms),
   Olexandr Konovalov (https://alex-konovalov.github.io/), and
   Helena Verrill (http://www.math.lsu.edu/~verrill).
Homepage: https://gap-packages.github.io/congruence
Report issues at https://github.com/gap-packages/congruence/issues
-----------------------------------------------------------------------------
true

2.1 Construction of congruence subgroups

2.1-1 PrincipalCongruenceSubgroup
‣ PrincipalCongruenceSubgroup( N )( operation )

Returns the principal congruence subgroup Γ(N) of level N in SL_2(ℤ).

This subgroup consists of all matrices of the form


                         [1+N*a    N*b]
                         [  N*c  1+N*d]

where a,b,c,d are integers. The returned group will have the property IsPrincipalCongruenceSubgroup (2.2-1).


gap> G_8:=PrincipalCongruenceSubgroup(8);
<principal congruence subgroup of level 8 in SL_2(Z)>
gap> IsGroup(G_8);
true
gap> IsMatrixGroup(G_8);
true
gap> DimensionOfMatrixGroup(G_8);
2
gap> MultiplicativeNeutralElement(G_8);
[ [ 1, 0 ], [ 0, 1 ] ]
gap> One(G);
[ [ 1, 0 ], [ 0, 1 ] ]
gap> [[1,2],[3,4]] in G_8;
false
gap> [[1,8],[8,65]] in G_8;
true
gap> SL_2:=SL(2,Integers);
SL(2,Integers)
gap> IsSubgroup(SL_2,G_8);
true

2.1-2 CongruenceSubgroupGamma0
‣ CongruenceSubgroupGamma0( N )( operation )

Returns the congruence subgroup Γ_0(N) of level N in SL_2(ℤ).

This subgroup consists of all matrices of the form


                         [a    b]
                         [N*c  d]

where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGamma0 (2.2-2).


gap> G0_4:=CongruenceSubgroupGamma0(4);
<congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>

2.1-3 CongruenceSubgroupGammaUpper0
‣ CongruenceSubgroupGammaUpper0( N )( operation )

Returns the congruence subgroup Γ^0(N) of level N in SL_2(ℤ).

This subgroup consists of all matrices of the form


                         [a  N*b]
                         [c    d]

where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper0 (2.2-3).


gap> GU0_2:=CongruenceSubgroupGammaUpper0(2);
<congruence subgroup CongruenceSubgroupGamma^0(2) in SL_2(Z)>

2.1-4 CongruenceSubgroupGamma1
‣ CongruenceSubgroupGamma1( N )( operation )

Returns the congruence subgroup Γ_1(N) of level N in SL_2(ℤ).

This subgroup consists of all matrices of the form


                         [1+N*a      b]
                         [  N*c  1+N*d]

where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGamma1 (2.2-4).


gap> G1_6:=CongruenceSubgroupGamma1(6);
<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)>

2.1-5 CongruenceSubgroupGammaUpper1
‣ CongruenceSubgroupGammaUpper1( N )( operation )

Returns the congruence subgroup Γ^1(N) of level N in SL_2(ℤ).

This subgroup consists of all matrices of the form


                         [1+N*a    N*b]
                         [    c  1+N*d]

where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper1 (2.2-5).


gap> GU1_4:=CongruenceSubgroupGammaUpper1(4);
<congruence subgroup CongruenceSubgroupGamma^1(4) in SL_2(Z)>

2.1-6 IntersectionOfCongruenceSubgroups
‣ IntersectionOfCongruenceSubgroups( G1, G2, ..., GN )( function )
‣ Intersection( G1, G2, ..., GN )( function )

Returns the intersection of its arguments, which can be congruence subgroups or their intersections, constructed with the same function. It is not necessary for the user to use IntersectionOfCongruenceSubgroups, since it will be called automatically from Intersection.

The returned group will have the property IsIntersectionOfCongruenceSubgroups (2.2-6).

The list of congruence subgroups that form the intersection can be obtained using DefiningCongruenceSubgroups (2.3-3). Note, that when the intersection appears to be one of the canonical congruence subgroups, the package will recognize this and will return a canonical subgroup of the appropriate type.


gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);
<principal congruence subgroup of level 4 in SL_2(Z)>
gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);
<intersection of congruence subgroups of resulting level 12 in SL_2(Z)>

2.2 Properties of congruence subgroups

A congruence subgroup constructed by one of the five above listed functions will have certain properties determining its type. These properties will be used for method selection by Congruence algorithms. Note that they do not provide an actual test whether a certain matrix group is a congruence subgroup or not.

2.2-1 IsPrincipalCongruenceSubgroup
‣ IsPrincipalCongruenceSubgroup( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by PrincipalCongruenceSubgroup (2.1-1) (or reduced to one as a result of an intersection) and returns false otherwise.


gap> IsPrincipalCongruenceSubgroup(G_8);
true
gap> IsPrincipalCongruenceSubgroup(G0_4);
false
gap> IsPrincipalCongruenceSubgroup(I);
true

2.2-2 IsCongruenceSubgroupGamma0
‣ IsCongruenceSubgroupGamma0( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGamma0 (2.1-2) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-3 IsCongruenceSubgroupGammaUpper0
‣ IsCongruenceSubgroupGammaUpper0( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGammaUpper0 (2.1-3) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-4 IsCongruenceSubgroupGamma1
‣ IsCongruenceSubgroupGamma1( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGamma1 (2.1-4) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-5 IsCongruenceSubgroupGammaUpper1
‣ IsCongruenceSubgroupGammaUpper1( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGammaUpper1 (2.1-5) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-6 IsIntersectionOfCongruenceSubgroups
‣ IsIntersectionOfCongruenceSubgroups( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by IntersectionOfCongruenceSubgroups (2.1-6) and without being one of the canonical congruence subgroups, otherwise it returns false.


gap> IsIntersectionOfCongruenceSubgroups(I);
false
gap> IsIntersectionOfCongruenceSubgroups(J);
true

2.3 Attributes of congruence subgroups

The next three attributes store key properties of congruence subgroups.

2.3-1 LevelOfCongruenceSubgroup
‣ LevelOfCongruenceSubgroup( G )( attribute )

Stores the level of the congruence subgroup G. The (arithmetic) level of a congruence subgroup G is the smallest positive number N such that G contains the principal congruence subgroup of level N.


gap> LevelOfCongruenceSubgroup(G_8);
8
gap> LevelOfCongruenceSubgroup(G1_6);
6
gap> LevelOfCongruenceSubgroup(I);
4
gap> LevelOfCongruenceSubgroup(J);
12

2.3-2 IndexInSL2Z
‣ IndexInSL2Z( G )( attribute )

Stores the index of the congruence subgroup G in SL_2(ℤ).


gap> IndexInSL2Z(G_8);
384
gap> G_2:=PrincipalCongruenceSubgroup(2);
<principal congruence subgroup of level 2 in SL_2(Z)>
gap> IndexInSL2Z(G_2);
12
gap> IndexInSL2Z(GU1_4);
12

2.3-3 DefiningCongruenceSubgroups
‣ DefiningCongruenceSubgroups( G )( attribute )

Returns: list of congruence subgroups

For an intersection of congruence subgroups, returns the list of congruence subgroups forming this intersection. For a canonical congruence subgroup returns a list of length one containing that subgroup.


gap> DefiningCongruenceSubgroups(J);
[ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>,
  <congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ]
gap> P:=PrincipalCongruenceSubgroup(6);
<principal congruence subgroup of level 6 in SL_2(Z)>
gap> Q:=PrincipalCongruenceSubgroup(10); 
<principal congruence subgroup of level 10 in SL_2(Z)>
gap> G:=IntersectionOfCongruenceSubgroups(Q,P);  
<principal congruence subgroup of level 30 in SL_2(Z)>
gap> DefiningCongruenceSubgroups(G);
[ <principal congruence subgroup of level 30 in SL_2(Z)> ] 

2.4 Operations for congruence subgroups

Congruence installs several special methods for operations already available in GAP.

2.4-1 Random
‣ Random( G )( operation )
‣ Random( G, m )( operation )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns random element. In the two-argument form, the second parameter will control the absolute value of randomly selected entries of the matrix.


gap> Random(G_2) in G_2;
true
gap> Random(G_8,2) in G_8;
true

2.4-2 \in
‣ \in( m, G )( operation )

It is easy to implement the membership test for congruence subgroups and their intersections.


gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2);
true
gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8);
false

2.4-3 CanEasilyCompareCongruenceSubgroups
‣ CanEasilyCompareCongruenceSubgroups( G, H )( operation )

For congruence subgroups G,H in the category IsCongruenceSubgroup, returns true if G and H are of the same type listed in PrincipalCongruenceSubgroup (2.1-1) --> CongruenceSubgroupGammaUpper1 (2.1-5) and have the same LevelOfCongruenceSubgroup (2.3-1) or if G and H are of the type IntersectionOfCongruenceSubgroups (2.1-6) and the groups from DefiningCongruenceSubgroups (2.3-3) are in one to one correspondence, otherwise it returns false.


gap> CanEasilyCompareCongruenceSubgroups(G_8,I);
false

2.4-4 IsSubset
‣ IsSubset( G, H )( operation )

Congruence provides methods for IsSubset for congruence subgroups. IsSubset returns true if H is a subset of G. These methods make it possible to use IsSubgroup operation for congruence subgroups.


gap> IsSubset(G_2,G_8);
true
gap> IsSubset(G_8,G_2);
false
gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];;
gap> g1:=List(f, t -> t(2));;
gap> g2:=List(f, t -> t(4));;
gap> for g in g2 do
> Print( List( g1, x -> IsSubgroup(x,g) ), "\n");
> od;
[ true, true, true, true, true ]
[ false, true, false, true, false ]
[ false, false, true, false, true ]
[ false, false, false, true, false ]
[ false, false, false, false, true ]

2.4-5 Index
‣ Index( G, H )( operation )

If a congruence subgroup H is a subgroup of a congruence subgroup G, we can easily compute the index of H in G, since we know the index of both subgroups in SL_2(ℤ).


gap> Index(G_2,G_8);
32

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap3.html000644 000766 000024 00000024307 14376366051 016321 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 3: Farey symbols and their properties
Goto Chapter: Top 1 2 3 4 5 Bib Ind

3 Farey symbols and their properties

A Farey symbol is a compact and useful way to represent a subgroup of finite index in SL_2(ℤ) from which one can deduce independent generators for this subgroup. It consists of two components, namely a so-called generalised Farey sequence (gfs) and an ordered list of labels, giving additional structure to the gfs.

A generalised Farey sequence (g.F.S.) is an ordered list of the form -infinity, x_0, x_1, ... , x_n, infinity, where

1. the x_i = a_i/b_i are rational numbers in reduced form arranged in increasing order for i = 0, ... , n;

2. x_0, ... , x_n ∈ Z, and some x_i = 0;

3. we define x_-1=-infinity=-1/0 and x_n+1=infinity=1/0;

4. a_i+1b_i-a_ib_i+1=1 for i=-1, ... ,n.

The ordered list of labels of a Farey symbol gives an additional structure to the gfs. The labels correspond to each consecutive pair of x_i's and are of the following types:

1. even,

2. odd,

3. a natural number, which occurs in the list of labels exactly twice or not at all.

Note that the actual values of numerical labels are not important; it is the pairing of two intervals that matters.

The package Congruence provides functions to construct Farey symbols by the given generalised Farey sequence and corresponding list of labels. The returned Farey symbol will belong to the category IsFareySymbol and will have the representation IsFareySymbolDefaultRep.

3.1 Construction of Farey symbols

3.1-1 FareySymbolByData
‣ FareySymbolByData( gfs, labels )( function )

This constructor creates the Farey symbol with the given generalized Farey sequence and list of labels. It also checks conditions from the definition of Farey symbol and returns an error if they are not satisfied. The data used to create the Farey symbol are stored as its attributes GeneralizedFareySequence (3.2-1) and LabelsOfFareySymbol (3.2-4).


gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);                         
[ infinity, 0, 1, 2, infinity ]
[ 1, 2, 2, 1 ]

3.1-2 IsValidFareySymbol
‣ IsValidFareySymbol( fs )( function )

This function is used in FareySymbolByData (3.1-1) to validate its output.


gap> IsValidFareySymbol(fs);
true

3.2 Properties of Farey symbols

3.2-1 GeneralizedFareySequence
‣ GeneralizedFareySequence( fs )( attribute )

Returns the generalized Farey sequence gfs of the Farey symbol.


gap> GeneralizedFareySequence(fs);
[ infinity, 0, 1, 2, infinity ]

3.2-2 NumeratorOfGFSElement
‣ NumeratorOfGFSElement( gfs, i )( function )

Returns: integer

Returns the numerator of the i-th term of the generalised Farey sequence gfs: for the 1st infinite entry returns -1, for the last one returns 1, for all other entries returns the usual numerator.


gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i));
[ -1, 0, 1, 2, 1 ]

3.2-3 DenominatorOfGFSElement
‣ DenominatorOfGFSElement( gfs, i )( function )

Returns: integer

Returns the denominator of the i-th term of the generalised Farey sequence gfs: for both infinite entries returns 0, for the other ones returns the usual denominator.


gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i));         
[ 0, 1, 1, 1, 0 ]

3.2-4 LabelsOfFareySymbol
‣ LabelsOfFareySymbol( fs )( attribute )

Returns the list of labels of the Farey symbol. This list has "odd", "even" and paired integers as entries.


gap> LabelsOfFareySymbol(fs);
[ 1, 2, 2, 1 ]

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap1_mj.html000644 000766 000024 00000012604 14376366051 017002 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 1: Introduction
Goto Chapter: Top 1 2 3 4 5 Bib Ind

1 Introduction

1.1 General aims of Congruence package

The GAP package Congruence provides functions to construct several types of canonical congruence subgroups in \(SL_2(ℤ)\), and also intersections of a finite number of such subgroups.

Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups.

Using the package, one can also determine indices of congruence subgroups and their intersections in \(SL_2(ℤ)\) and in other congruence subgroups, generate their random elements and check element memberships. Success of other group theoretical constructions mostly depends on whether they could be expressed in terms of group generators or not.

For the theoretical backround, we refer to [LLT95b], [LLT95a], [CLLT93] and [Kul91].

1.2 Installation and system requirements

Congruence is distributed in standard formats (tar.gz, tar.bz2, -win.zip) and can be obtained from https://gap-packages.github.io/congruence/.

Congruence does not use external binaries and, therefore, works without restrictions on the operating system. It requires at least version GAP 4.5, and no compatibility with previous releases of GAP 4 is guaranteed.

Installation of the package is standard and follows the guidelines from the GAP manual (see Reference: Installing a GAP Package. After the package is installed, you can start GAP and load the Congruence package using the command:


gap> LoadPackage("congruence");

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/manual.js000644 000766 000024 00000010113 14376366051 016236 0ustar00obk1staff000000 000000 /* manual.js Frank Lübeck */ /* This file contains a few javascript functions which allow to switch between display styles for GAPDoc HTML manuals. If javascript is switched off in a browser or this file in not available in a manual directory, this is no problem. Users just cannot switch between several styles and don't see the corresponding button. A style with name mystyle can be added by providing two files (or only one of them). mystyle.js: Additional javascript code for the style, it is read in the HTML pages after this current file. The additional code may adjust the preprocessing function jscontent() with is called onload of a file. This is done by appending functions to jscontentfuncs (jscontentfuncs.push(newfunc);). Make sure, that your style is still usable without javascript. mystyle.css: CSS configuration, read after manual.css (so it can just reconfigure a few details, or overwrite everything). Then adjust chooser.html such that users can switch on and off mystyle. A user can change the preferred style permanently by using the [Style] link and choosing one. Or one can append '?GAPDocStyle=mystyle' to the URL when loading any file of the manual (so the style can be configured in the GAP user preferences). */ /* generic helper function */ function deleteCookie(nam) { document.cookie = nam+"=;Path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT"; } /* read a value from a "nam1=val1;nam2=val2;..." string (e.g., the search part of an URL or a cookie */ function valueString(str,nam) { var cs = str.split(";"); for (var i=0; i < cs.length; i++) { var pos = cs[i].search(nam+"="); if (pos > -1) { pos = cs[i].indexOf("="); return cs[i].slice(pos+1); } } return 0; } /* when a non-default style is chosen via URL or a cookie, then the cookie is reset and the styles .js and .css files are read */ function overwriteStyle() { /* style in URL? */ var style = valueString(window.location.search, "GAPDocStyle"); /* otherwise check cookie */ if (style == 0) style = valueString(document.cookie, "GAPDocStyle"); if (style == 0) return; if (style == "default") deleteCookie("GAPDocStyle"); else { /* ok, we set the cookie for path "/" */ var path = "/"; /* or better like this ??? var here = window.location.pathname.split("/"); for (var i=0; i+3 < here.length; i++) path = path+"/"+here[i]; */ document.cookie = "GAPDocStyle="+style+";Path="+path; /* split into names of style files */ var stlist = style.split(","); /* read style's css and js files */ for (var i=0; i < stlist.length; i++) { document.writeln(''); document.writeln(''); } } } /* this adds a "[Style]" link next to the MathJax switcher */ function addStyleLink() { var line = document.getElementById("mathjaxlink"); var el = document.createElement("a"); var oncl = document.createAttribute("href"); var back = window.location.protocol+"//" if (window.location.protocol == "http:" || window.location.protocol == "https:") { back = back+window.location.host; if (window.location.port != "") { back = back+":"+window.location.port; } } back = back+window.location.pathname; oncl.nodeValue = "chooser.html?BACK="+back; el.setAttributeNode(oncl); var cont = document.createTextNode(" [Style]"); el.appendChild(cont); line.appendChild(el); } var jscontentfuncs = new Array(); jscontentfuncs.push(addStyleLink); /* the default jscontent() only adds the [Style] link to the page */ function jscontent () { for (var i=0; i < jscontentfuncs.length; i++) jscontentfuncs[i](); } congruence-1.2.5/doc/chapInd.html000644 000766 000024 00000014172 14376366051 016670 0ustar00obk1staff000000 000000 GAP (Congruence) - Index
Goto Chapter: Top 1 2 3 4 5 Bib Ind

Index

\in 2.4-2
CanEasilyCompareCongruenceSubgroups 2.4-3
Congruence package .-1
CongruenceSubgroupGamma0 2.1-2
CongruenceSubgroupGamma1 2.1-4
CongruenceSubgroupGammaUpper0 2.1-3
CongruenceSubgroupGammaUpper1 2.1-5
DefiningCongruenceSubgroups 2.3-3
DenominatorOfGFSElement 3.2-3
FareySymbol 4.1-1
FareySymbolByData 3.1-1
GeneralizedFareySequence 3.2-1
GeneratorsByFareySymbol 4.2-4
GeneratorsOfGroup 4.2-5
Index 2.4-5
IndexInPSL2ZByFareySymbol 4.3-1
IndexInSL2Z 2.3-2
InfoCongruence 5.1-1
Intersection 2.1-6
IntersectionOfCongruenceSubgroups 2.1-6
IsCongruenceSubgroup 1.1 2.
IsCongruenceSubgroupGamma0 2.2-2
IsCongruenceSubgroupGamma1 2.2-4
IsCongruenceSubgroupGammaUpper0 2.2-3
IsCongruenceSubgroupGammaUpper1 2.2-5
IsFareySymbol 3.
IsFareySymbolDefaultRep 3.
IsIntersectionOfCongruenceSubgroups 2.2-6
IsPrincipalCongruenceSubgroup 2.2-1
IsSubset 2.4-4
IsValidFareySymbol 3.1-2
LabelsOfFareySymbol 3.2-4
LevelOfCongruenceSubgroup 2.3-1
MatrixByEvenInterval 4.2-1
MatrixByFreePairOfIntervals 4.2-3
MatrixByOddInterval 4.2-2
NumeratorOfGFSElement 3.2-2
PrincipalCongruenceSubgroup 2.1-1
Random 2.4-1
    one and two argument versions 2.4-1

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap3_mj.html000644 000766 000024 00000024774 14376366051 017017 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 3: Farey symbols and their properties
Goto Chapter: Top 1 2 3 4 5 Bib Ind

3 Farey symbols and their properties

A Farey symbol is a compact and useful way to represent a subgroup of finite index in \(SL_2(ℤ)\) from which one can deduce independent generators for this subgroup. It consists of two components, namely a so-called generalised Farey sequence (gfs) and an ordered list of labels, giving additional structure to the gfs.

A generalised Farey sequence (g.F.S.) is an ordered list of the form \({ -infinity, x_0, x_1, ... , x_n, infinity }\), where

1. the \(x_i = a_i/b_i\) are rational numbers in reduced form arranged in increasing order for \(i = 0, ... , n\);

2. \(x_0, ... , x_n \in Z\), and some \(x_i = 0\);

3. we define \(x_{-1}=-infinity=-1/0\) and \(x_{n+1}=infinity=1/0\);

4. \(a_{i+1}b_{i}-a_{i}b_{i+1}=1\) for \(i=-1, ... ,n\).

The ordered list of labels of a Farey symbol gives an additional structure to the gfs. The labels correspond to each consecutive pair of \(x_i\)'s and are of the following types:

1. even,

2. odd,

3. a natural number, which occurs in the list of labels exactly twice or not at all.

Note that the actual values of numerical labels are not important; it is the pairing of two intervals that matters.

The package Congruence provides functions to construct Farey symbols by the given generalised Farey sequence and corresponding list of labels. The returned Farey symbol will belong to the category IsFareySymbol and will have the representation IsFareySymbolDefaultRep.

3.1 Construction of Farey symbols

3.1-1 FareySymbolByData
‣ FareySymbolByData( gfs, labels )( function )

This constructor creates the Farey symbol with the given generalized Farey sequence and list of labels. It also checks conditions from the definition of Farey symbol and returns an error if they are not satisfied. The data used to create the Farey symbol are stored as its attributes GeneralizedFareySequence (3.2-1) and LabelsOfFareySymbol (3.2-4).


gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);                         
[ infinity, 0, 1, 2, infinity ]
[ 1, 2, 2, 1 ]

3.1-2 IsValidFareySymbol
‣ IsValidFareySymbol( fs )( function )

This function is used in FareySymbolByData (3.1-1) to validate its output.


gap> IsValidFareySymbol(fs);
true

3.2 Properties of Farey symbols

3.2-1 GeneralizedFareySequence
‣ GeneralizedFareySequence( fs )( attribute )

Returns the generalized Farey sequence gfs of the Farey symbol.


gap> GeneralizedFareySequence(fs);
[ infinity, 0, 1, 2, infinity ]

3.2-2 NumeratorOfGFSElement
‣ NumeratorOfGFSElement( gfs, i )( function )

Returns: integer

Returns the numerator of the i-th term of the generalised Farey sequence gfs: for the 1st infinite entry returns -1, for the last one returns 1, for all other entries returns the usual numerator.


gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i));
[ -1, 0, 1, 2, 1 ]

3.2-3 DenominatorOfGFSElement
‣ DenominatorOfGFSElement( gfs, i )( function )

Returns: integer

Returns the denominator of the i-th term of the generalised Farey sequence gfs: for both infinite entries returns 0, for the other ones returns the usual denominator.


gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i));         
[ 0, 1, 1, 1, 0 ]

3.2-4 LabelsOfFareySymbol
‣ LabelsOfFareySymbol( fs )( attribute )

Returns the list of labels of the Farey symbol. This list has "odd", "even" and paired integers as entries.


gap> LabelsOfFareySymbol(fs);
[ 1, 2, 2, 1 ]

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chapInd.txt000644 000766 000024 00000003313 14376366045 016541 0ustar00obk1staff000000 000000 Index \in 2.4-2 CanEasilyCompareCongruenceSubgroups 2.4-3 Congruence package .-1 CongruenceSubgroupGamma0 2.1-2 CongruenceSubgroupGamma1 2.1-4 CongruenceSubgroupGammaUpper0 2.1-3 CongruenceSubgroupGammaUpper1 2.1-5 DefiningCongruenceSubgroups 2.3-3 DenominatorOfGFSElement 3.2-3 FareySymbol 4.1-1 FareySymbolByData 3.1-1 GeneralizedFareySequence 3.2-1 GeneratorsByFareySymbol 4.2-4 GeneratorsOfGroup 4.2-5 Index 2.4-5 IndexInPSL2ZByFareySymbol 4.3-1 IndexInSL2Z 2.3-2 InfoCongruence 5.1-1 Intersection 2.1-6 IntersectionOfCongruenceSubgroups 2.1-6 IsCongruenceSubgroup 1.1 2. IsCongruenceSubgroupGamma0 2.2-2 IsCongruenceSubgroupGamma1 2.2-4 IsCongruenceSubgroupGammaUpper0 2.2-3 IsCongruenceSubgroupGammaUpper1 2.2-5 IsFareySymbol 3. IsFareySymbolDefaultRep 3. IsIntersectionOfCongruenceSubgroups 2.2-6 IsPrincipalCongruenceSubgroup 2.2-1 IsSubset 2.4-4 IsValidFareySymbol 3.1-2 LabelsOfFareySymbol 3.2-4 LevelOfCongruenceSubgroup 2.3-1 MatrixByEvenInterval 4.2-1 MatrixByFreePairOfIntervals 4.2-3 MatrixByOddInterval 4.2-2 NumeratorOfGFSElement 3.2-2 PrincipalCongruenceSubgroup 2.1-1 Random 2.4-1 one and two argument versions 2.4-1 ------------------------------------------------------- congruence-1.2.5/doc/service.xml000644 000766 000024 00000001426 14376366031 016612 0ustar00obk1staff000000 000000 Service functions of the &Congruence; package
Additional information displayed by &Congruence; algorithms InfoCongruence is a special Info class for &Congruence; algorithms. It has 3 levels: 0, 1 (default) and 2. To change the info level to k, use the command SetInfoLevel(InfoCongruence, k).

In the example below we use this mechanism to see more details during the Farey symbol construction for a congruence subgroup.

congruence-1.2.5/doc/cong.xml000644 000766 000024 00000041117 14376366031 016101 0ustar00obk1staff000000 000000 Construction of congruence subgroups IsCongruenceSubgroup The package &Congruence; provides functions to construct several types of canonical congruence subgroups in SL_2(&ZZ;), and also intersections of a finite number of such subgroups. They will return a matrix group in the category IsCongruenceSubgroup, which is defined as a subcategory of IsMatrixGroup, and which will have a distinguishing property determining whether it is a congruence subgroup of one of the canonical types, or an intersection of such congruence subgroups (if it can not be reduced to one of the canonical congruence subgroups). To start to work with the package, you need first to load it as follows: LoadPackage("congruence"); ----------------------------------------------------------------------------- Loading Congruence 1.2.4 (Congruence subgroups of SL(2,Integers)) by Ann Dooms (http://homepages.vub.ac.be/~andooms), Eric Jespers (http://homepages.vub.ac.be/~efjesper), Olexandr Konovalov (https://alex-konovalov.github.io/), and Helena Verrill (http://www.math.lsu.edu/~verrill). maintained by: Ann Dooms (http://homepages.vub.ac.be/~andooms), Olexandr Konovalov (https://alex-konovalov.github.io/), and Helena Verrill (http://www.math.lsu.edu/~verrill). Homepage: https://gap-packages.github.io/congruence Report issues at https://github.com/gap-packages/congruence/issues ----------------------------------------------------------------------------- true ]]>
Construction of congruence subgroups Returns the principal congruence subgroup \Gamma(N) of level N in SL_2(&ZZ;).

This subgroup consists of all matrices of the form where a,b,c,d are integers. The returned group will have the property . G_8:=PrincipalCongruenceSubgroup(8); gap> IsGroup(G_8); true gap> IsMatrixGroup(G_8); true gap> DimensionOfMatrixGroup(G_8); 2 gap> MultiplicativeNeutralElement(G_8); [ [ 1, 0 ], [ 0, 1 ] ] gap> One(G); [ [ 1, 0 ], [ 0, 1 ] ] gap> [[1,2],[3,4]] in G_8; false gap> [[1,8],[8,65]] in G_8; true gap> SL_2:=SL(2,Integers); SL(2,Integers) gap> IsSubgroup(SL_2,G_8); true ]]> Returns the congruence subgroup \Gamma_0(N) of level N in SL_2(&ZZ;).

This subgroup consists of all matrices of the form where a,b,c,d are integers. The returned group will have the property . G0_4:=CongruenceSubgroupGamma0(4); ]]> Returns the congruence subgroup \Gamma^0(N) of level N in SL_2(&ZZ;).

This subgroup consists of all matrices of the form where a,b,c,d are integers. The returned group will have the property . GU0_2:=CongruenceSubgroupGammaUpper0(2); ]]> Returns the congruence subgroup \Gamma_1(N) of level N in SL_2(&ZZ;).

This subgroup consists of all matrices of the form where a,b,c,d are integers. The returned group will have the property . G1_6:=CongruenceSubgroupGamma1(6); ]]> Returns the congruence subgroup \Gamma^1(N) of level N in SL_2(&ZZ;).

This subgroup consists of all matrices of the form where a,b,c,d are integers. The returned group will have the property . GU1_4:=CongruenceSubgroupGammaUpper1(4); ]]> Returns the intersection of its arguments, which can be congruence subgroups or their intersections, constructed with the same function. It is not necessary for the user to use IntersectionOfCongruenceSubgroups, since it will be called automatically from Intersection.

The returned group will have the property .

The list of congruence subgroups that form the intersection can be obtained using . Note, that when the intersection appears to be one of the canonical congruence subgroups, the package will recognize this and will return a canonical subgroup of the appropriate type. I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4); gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6); ]]>

Properties of congruence subgroups A congruence subgroup constructed by one of the five above listed functions will have certain properties determining its type. These properties will be used for method selection by &Congruence; algorithms. Note that they do not provide an actual test whether a certain matrix group is a congruence subgroup or not. For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by (or reduced to one as a result of an intersection) and returns false otherwise. IsPrincipalCongruenceSubgroup(G_8); true gap> IsPrincipalCongruenceSubgroup(G0_4); false gap> IsPrincipalCongruenceSubgroup(I); true ]]> For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by (or reduced to one as a result of an intersection) and returns false otherwise. For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by (or reduced to one as a result of an intersection) and returns false otherwise. For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by (or reduced to one as a result of an intersection) and returns false otherwise. For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by (or reduced to one as a result of an intersection) and returns false otherwise. For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by and without being one of the canonical congruence subgroups, otherwise it returns false. IsIntersectionOfCongruenceSubgroups(I); false gap> IsIntersectionOfCongruenceSubgroups(J); true ]]>
Attributes of congruence subgroups The next three attributes store key properties of congruence subgroups. Stores the level of the congruence subgroup G. The (arithmetic) level of a congruence subgroup G is the smallest positive number N such that G contains the principal congruence subgroup of level N. LevelOfCongruenceSubgroup(G_8); 8 gap> LevelOfCongruenceSubgroup(G1_6); 6 gap> LevelOfCongruenceSubgroup(I); 4 gap> LevelOfCongruenceSubgroup(J); 12 ]]> Stores the index of the congruence subgroup G in SL_2(&ZZ;). IndexInSL2Z(G_8); 384 gap> G_2:=PrincipalCongruenceSubgroup(2); gap> IndexInSL2Z(G_2); 12 gap> IndexInSL2Z(GU1_4); 12 ]]> list of congruence subgroups For an intersection of congruence subgroups, returns the list of congruence subgroups forming this intersection. For a canonical congruence subgroup returns a list of length one containing that subgroup. DefiningCongruenceSubgroups(J); [ , ] gap> P:=PrincipalCongruenceSubgroup(6); gap> Q:=PrincipalCongruenceSubgroup(10); gap> G:=IntersectionOfCongruenceSubgroups(Q,P); gap> DefiningCongruenceSubgroups(G); [ ] ]]>
Operations for congruence subgroups &Congruence; installs several special methods for operations already available in &GAP;. For a congruence subgroup G in the category IsCongruenceSubgroup, returns random element. In the two-argument form, the second parameter will control the absolute value of randomly selected entries of the matrix. Random(G_2) in G_2; true gap> Random(G_8,2) in G_8; true ]]> It is easy to implement the membership test for congruence subgroups and their intersections. \in([ [ 21, 10 ], [ 2, 1 ] ],G_2); true gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8); false ]]> For congruence subgroups G,H in the category IsCongruenceSubgroup, returns true if G and H are of the same type listed in --> and have the same or if G and H are of the type and the groups from are in one to one correspondence, otherwise it returns false. CanEasilyCompareCongruenceSubgroups(G_8,I); false ]]> &Congruence; provides methods for IsSubset for congruence subgroups. IsSubset returns true if H is a subset of G. These methods make it possible to use IsSubgroup operation for congruence subgroups. IsSubset(G_2,G_8); true gap> IsSubset(G_8,G_2); false gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];; gap> g1:=List(f, t -> t(2));; gap> g2:=List(f, t -> t(4));; gap> for g in g2 do > Print( List( g1, x -> IsSubgroup(x,g) ), "\n"); > od; [ true, true, true, true, true ] [ false, true, false, true, false ] [ false, false, true, false, true ] [ false, false, false, true, false ] [ false, false, false, false, true ] ]]> If a congruence subgroup H is a subgroup of a congruence subgroup G, we can easily compute the index of H in G, since we know the index of both subgroups in SL_2(&ZZ;). Index(G_2,G_8); 32 ]]>
congruence-1.2.5/doc/chap4.html000644 000766 000024 00000037100 14376366051 016315 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 4: Farey symbols for congruence subgroups
Goto Chapter: Top 1 2 3 4 5 Bib Ind

4 Farey symbols for congruence subgroups

The package Congruence provides functions to construct Farey symbols for finite index subgroups. The algorithm used in the package allows to construct a Farey symbol for any finite index subgroup of SL_2(ℤ) for which it is possible to check whether a given matrix belongs to this subgroup or not.

The development of an algorithm to determine the Farey symbol for a subgroup G of a finite index in SL_2(ℤ) was started by Ravi Kulkarni in [Kul91] and later it was improved by Mong-Lung Lang, Chong-Hai Lim and Ser-Peow Tan in [LLT95b], [LLT95a].

4.1 Computation of the Farey symbol for a finite index subgroup

4.1-1 FareySymbol
‣ FareySymbol( G )( attribute )

For a subgroup of a finite index G, this attribute stores one of the Farey symbols corresponding to the congruence subgroup G. The algorithm for its computation will work for any matrix group for which a membership test is available.


gap> FareySymbol(PrincipalCongruenceSubgroup(8));
[ infinity, 0, 1/4, 1/3, 3/8, 2/5, 1/2, 3/5, 5/8, 2/3, 3/4, 1, 5/4, 4/3, 
  11/8, 7/5, 3/2, 8/5, 13/8, 5/3, 7/4, 2, 9/4, 7/3, 19/8, 12/5, 5/2, 13/5, 
  21/8, 8/3, 11/4, 3, 13/4, 10/3, 27/8, 17/5, 7/2, 18/5, 29/8, 11/3, 15/4, 4, 
  17/4, 13/3, 9/2, 14/3, 19/4, 5, 21/4, 16/3, 11/2, 17/3, 23/4, 6, 25/4, 
  19/3, 13/2, 20/3, 27/4, 7, 29/4, 22/3, 15/2, 23/3, 31/4, 8, infinity ]
[ 1, 17, 10, 26, 32, 18, 19, 27, 30, 5, 2, 2, 13, 28, 26, 20, 21, 29, 27, 7, 
  3, 3, 16, 31, 28, 22, 23, 33, 29, 9, 4, 4, 5, 30, 31, 24, 25, 32, 33, 12, 
  6, 6, 7, 19, 18, 15, 8, 8, 9, 21, 20, 10, 11, 11, 12, 23, 22, 13, 14, 14, 
  15, 25, 24, 16, 17, 1 ]
gap> FareySymbol(CongruenceSubgroupGamma0(20));
[ infinity, 0, 1/5, 1/4, 2/7, 3/10, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1, 
  infinity ]
[ 1, 3, 4, 6, 7, 7, 5, 2, 2, 3, 6, 4, 5, 1 ]  

4.2 Computation of generators of a finite index subgroup from its Farey symbol

If fs is the Farey symbol for a group G with r_1 even labels, r_2 odd labels and r_3 pairs of intervals, then G is generated by r_1+r_2+r_3 matrices, which form a set of independent generators for G. These matrices are constructed as follows:

for each even interval [x_i, x_i+1], take the matrix


                       A=  [a_{i+1} b_{i+1} + a_i b_i    -a_i^2 - a_{i+1}^2        ]
                           [b_i^2 +b_{i+1}^2             -a_{i+1} b_{i+1} - a_i b_i]

for each odd interval [x_j,x_j+1], take the matrix


                        B=  [a_{j+1} b_{j+1} + a_j b_{j+1} + a_j b_j      -a_j^2 - a_j a_{j+1} -a_{j+1}^2]
                            [ b_j^2 + b_j b_{j+1} + b_{j+1}^2  -a_{j+1}   b_{j+1} - a_{j+1} b_j - a_j b_j]

for each pair of free intervals [x_k,x_k+1] and [x_s,x_s+1], take the matrix


                        C=  [a_{s+1} b_{k+1} + a_s b_k    -a_s a_k - a_{s+1} a_{k+1}]
                            [b_s b_k- b_{s+1} b_{k+1}c    -a_{k+1} b_{s+1} - a_k b_s]

4.2-1 MatrixByEvenInterval
‣ MatrixByEvenInterval( gfs, i )( function )

Returns the matrix corresponding to the even interval i in the generalized Farey sequence gfs.


gap> H:=CongruenceSubgroupGamma0(5); 
<congruence subgroup CongruenceSubgroupGamma_0(5) in SL_2(Z)>
gap> fs:=FareySymbol(H);
[ infinity, 0, 1/2, 1, infinity ]
[ 1, "even", "even", 1 ]
gap> gfs:=GeneralizedFareySequence(fs);
[ infinity, 0, 1/2, 1, infinity ]
gap> MatrixByEvenInterval(gfs,2);      
[ [ 2, -1 ], [ 5, -2 ] ]

4.2-2 MatrixByOddInterval
‣ MatrixByOddInterval( gfs, i )( function )

Returns the matrix corresponding to the odd interval i in the generalized Farey sequence gfs.


gap> fs_oo:=FareySymbolByData([infinity,0,infinity],["odd","odd"]);;
gap> gfs_oo:=GeneralizedFareySequence(fs_oo);
[ infinity, 0, infinity ]
gap> MatrixByOddInterval(gfs_oo,1);
[ [ -1, -1 ], [ 1, 0 ] ]

4.2-3 MatrixByFreePairOfIntervals
‣ MatrixByFreePairOfIntervals( gfs, k, kp )( function )

Returns the matrix corresponding to the pair of free intervals k and kp in the generalized Farey sequence gfs.


gap> fs_free:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);;
gap> gfs_free:=GeneralizedFareySequence(fs_free);;
gap> MatrixByFreePairOfIntervals(gfs_free,2,3);                                                        
[ [ 3, -2 ], [ 2, -1 ] ]

4.2-4 GeneratorsByFareySymbol
‣ GeneratorsByFareySymbol( fs )( function )

Returns a set of matrices constructed as above.


gap> fs_eo:=FareySymbolByData([infinity,0,infinity],["even","odd"]);;
gap> GeneratorsByFareySymbol(last);                                  
[ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ]
gap> GeneratorsByFareySymbol(fs); 
[ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ]
gap> GeneratorsByFareySymbol(fs_oo);
[ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ]
gap> GeneratorsByFareySymbol(fs_free);                                                        
[ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ]

4.2-5 GeneratorsOfGroup
‣ GeneratorsOfGroup( G )( function )

Returns a set of generators for the finite index group G in SL_2(Z).


gap> G:=PrincipalCongruenceSubgroup(2);
<principal congruence subgroup of level 2 in SL_2(Z)>
gap> FareySymbol(G);
[ infinity, 0, 1, 2, infinity ]
[ 2, 1, 1, 2 ]
gap> GeneratorsOfGroup(G);
#I  Using the Congruence package for GeneratorsOfGroup ...
[ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ]
gap> H:=CongruenceSubgroupGamma0(5);        
<congruence subgroup CongruenceSubgroupGamma_0(5) in SL_2(Z)>
gap> GeneratorsOfGroup(H);
#I  Using the Congruence package for GeneratorsOfGroup ...
[ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ]
gap> I:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(3));
<intersection of congruence subgroups of resulting level 6 in SL_2(Z)>
gap> FareySymbol(I);
[ infinity, 0, 1/3, 1/2, 2/3, 1, 4/3, 3/2, 5/3, 2, infinity ]
[ 1, 5, 4, 3, 2, 2, 3, 4, 5, 1 ]
gap> GeneratorsOfGroup(I);                                                          
#I  Using the Congruence package for GeneratorsOfGroup ...
[ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 11, -2 ], [ 6, -1 ] ], 
  [ [ 19, -8 ], [ 12, -5 ] ], [ [ 17, -10 ], [ 12, -7 ] ], 
  [ [ 7, -6 ], [ 6, -5 ] ] ]

4.3 Other properties derived from Farey symbols

4.3-1 IndexInPSL2ZByFareySymbol
‣ IndexInPSL2ZByFareySymbol( fs )( function )

By Proposition 7.2 in [Kulkarni], for the Farey symbol with underlying generalized Farey sequence [infinity, x0, x1, ..., xn, infinity], the index in PSL_2(Z) is given by the formula d = 3*n + e3, where e3 is the number of odd intervals.


gap> IndexInPSL2ZByFareySymbol(fs);
6
gap> IndexInPSL2ZByFareySymbol(fs_oo);
2
gap> IndexInPSL2ZByFareySymbol(fs_free);
6

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/nocolorprompt.css000644 000766 000024 00000000313 14376366051 020053 0ustar00obk1staff000000 000000 /* colors for ColorPrompt like examples */ span.GAPprompt { color: #000000; font-weight: normal; } span.GAPbrkprompt { color: #000000; font-weight: normal; } span.GAPinput { color: #000000; } congruence-1.2.5/doc/lefttoc.css000644 000766 000024 00000000474 14376366051 016606 0ustar00obk1staff000000 000000 /* leftmenu.css Frank Lübeck */ /* Change default CSS to show section menu on left side */ body { padding-left: 28%; } body.chap0 { padding-left: 2%; } div.ChapSects div.ContSect:hover div.ContSSBlock { left: 15%; } div.ChapSects { left: 1%; width: 25%; } congruence-1.2.5/doc/intro.xml000644 000766 000024 00000004032 14376366031 016301 0ustar00obk1staff000000 000000 Introduction
General aims of &Congruence; package IsCongruenceSubgroup The &GAP; package &Congruence; provides functions to construct several types of canonical congruence subgroups in SL_2(&ZZ;), and also intersections of a finite number of such subgroups.

Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups.

Using the package, one can also determine indices of congruence subgroups and their intersections in SL_2(&ZZ;) and in other congruence subgroups, generate their random elements and check element memberships. Success of other group theoretical constructions mostly depends on whether they could be expressed in terms of group generators or not.

For the theoretical backround, we refer to , , and .

Installation and system requirements &Congruence; is distributed in standard formats (tar.gz, tar.bz2, -win.zip) and can be obtained from https://gap-packages.github.io/congruence/.

&Congruence; does not use external binaries and, therefore, works without restrictions on the operating system. It requires at least version &GAP; 4.5, and no compatibility with previous releases of &GAP; 4 is guaranteed.

Installation of the package is standard and follows the guidelines from the &GAP; manual (see . After the package is installed, you can start &GAP; and load the &Congruence; package using the command: LoadPackage("congruence"); ]]>

congruence-1.2.5/doc/chap2_mj.html000644 000766 000024 00000101373 14376366051 017005 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 2: Construction of congruence subgroups
Goto Chapter: Top 1 2 3 4 5 Bib Ind

2 Construction of congruence subgroups

The package Congruence provides functions to construct several types of canonical congruence subgroups in \(SL_2(ℤ)\), and also intersections of a finite number of such subgroups. They will return a matrix group in the category IsCongruenceSubgroup, which is defined as a subcategory of IsMatrixGroup, and which will have a distinguishing property determining whether it is a congruence subgroup of one of the canonical types, or an intersection of such congruence subgroups (if it can not be reduced to one of the canonical congruence subgroups). To start to work with the package, you need first to load it as follows:


gap> LoadPackage("congruence");
-----------------------------------------------------------------------------
Loading  Congruence 1.2.4 (Congruence subgroups of SL(2,Integers))
by Ann Dooms (http://homepages.vub.ac.be/~andooms),
   Eric Jespers (http://homepages.vub.ac.be/~efjesper),
   Olexandr Konovalov (https://alex-konovalov.github.io/), and
   Helena Verrill (http://www.math.lsu.edu/~verrill).
maintained by:
   Ann Dooms (http://homepages.vub.ac.be/~andooms),
   Olexandr Konovalov (https://alex-konovalov.github.io/), and
   Helena Verrill (http://www.math.lsu.edu/~verrill).
Homepage: https://gap-packages.github.io/congruence
Report issues at https://github.com/gap-packages/congruence/issues
-----------------------------------------------------------------------------
true

2.1 Construction of congruence subgroups

2.1-1 PrincipalCongruenceSubgroup
‣ PrincipalCongruenceSubgroup( N )( operation )

Returns the principal congruence subgroup \(\Gamma(N)\) of level N in \(SL_2(ℤ)\).

This subgroup consists of all matrices of the form


                         [1+N*a    N*b]
                         [  N*c  1+N*d]

where \(a\),\(b\),\(c\),\(d\) are integers. The returned group will have the property IsPrincipalCongruenceSubgroup (2.2-1).


gap> G_8:=PrincipalCongruenceSubgroup(8);
<principal congruence subgroup of level 8 in SL_2(Z)>
gap> IsGroup(G_8);
true
gap> IsMatrixGroup(G_8);
true
gap> DimensionOfMatrixGroup(G_8);
2
gap> MultiplicativeNeutralElement(G_8);
[ [ 1, 0 ], [ 0, 1 ] ]
gap> One(G);
[ [ 1, 0 ], [ 0, 1 ] ]
gap> [[1,2],[3,4]] in G_8;
false
gap> [[1,8],[8,65]] in G_8;
true
gap> SL_2:=SL(2,Integers);
SL(2,Integers)
gap> IsSubgroup(SL_2,G_8);
true

2.1-2 CongruenceSubgroupGamma0
‣ CongruenceSubgroupGamma0( N )( operation )

Returns the congruence subgroup \(\Gamma_0(N)\) of level N in \(SL_2(ℤ)\).

This subgroup consists of all matrices of the form


                         [a    b]
                         [N*c  d]

where \(a\),\(b\),\(c\),\(d\) are integers. The returned group will have the property IsCongruenceSubgroupGamma0 (2.2-2).


gap> G0_4:=CongruenceSubgroupGamma0(4);
<congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>

2.1-3 CongruenceSubgroupGammaUpper0
‣ CongruenceSubgroupGammaUpper0( N )( operation )

Returns the congruence subgroup \(\Gamma^0(N)\) of level N in \(SL_2(ℤ)\).

This subgroup consists of all matrices of the form


                         [a  N*b]
                         [c    d]

where \(a\),\(b\),\(c\),\(d\) are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper0 (2.2-3).


gap> GU0_2:=CongruenceSubgroupGammaUpper0(2);
<congruence subgroup CongruenceSubgroupGamma^0(2) in SL_2(Z)>

2.1-4 CongruenceSubgroupGamma1
‣ CongruenceSubgroupGamma1( N )( operation )

Returns the congruence subgroup \(\Gamma_1(N)\) of level N in \(SL_2(ℤ)\).

This subgroup consists of all matrices of the form


                         [1+N*a      b]
                         [  N*c  1+N*d]

where \(a\),\(b\),\(c\),\(d\) are integers. The returned group will have the property IsCongruenceSubgroupGamma1 (2.2-4).


gap> G1_6:=CongruenceSubgroupGamma1(6);
<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)>

2.1-5 CongruenceSubgroupGammaUpper1
‣ CongruenceSubgroupGammaUpper1( N )( operation )

Returns the congruence subgroup \(\Gamma^1(N)\) of level N in \(SL_2(ℤ)\).

This subgroup consists of all matrices of the form


                         [1+N*a    N*b]
                         [    c  1+N*d]

where \(a\),\(b\),\(c\),\(d\) are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper1 (2.2-5).


gap> GU1_4:=CongruenceSubgroupGammaUpper1(4);
<congruence subgroup CongruenceSubgroupGamma^1(4) in SL_2(Z)>

2.1-6 IntersectionOfCongruenceSubgroups
‣ IntersectionOfCongruenceSubgroups( G1, G2, ..., GN )( function )
‣ Intersection( G1, G2, ..., GN )( function )

Returns the intersection of its arguments, which can be congruence subgroups or their intersections, constructed with the same function. It is not necessary for the user to use IntersectionOfCongruenceSubgroups, since it will be called automatically from Intersection.

The returned group will have the property IsIntersectionOfCongruenceSubgroups (2.2-6).

The list of congruence subgroups that form the intersection can be obtained using DefiningCongruenceSubgroups (2.3-3). Note, that when the intersection appears to be one of the canonical congruence subgroups, the package will recognize this and will return a canonical subgroup of the appropriate type.


gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);
<principal congruence subgroup of level 4 in SL_2(Z)>
gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);
<intersection of congruence subgroups of resulting level 12 in SL_2(Z)>

2.2 Properties of congruence subgroups

A congruence subgroup constructed by one of the five above listed functions will have certain properties determining its type. These properties will be used for method selection by Congruence algorithms. Note that they do not provide an actual test whether a certain matrix group is a congruence subgroup or not.

2.2-1 IsPrincipalCongruenceSubgroup
‣ IsPrincipalCongruenceSubgroup( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by PrincipalCongruenceSubgroup (2.1-1) (or reduced to one as a result of an intersection) and returns false otherwise.


gap> IsPrincipalCongruenceSubgroup(G_8);
true
gap> IsPrincipalCongruenceSubgroup(G0_4);
false
gap> IsPrincipalCongruenceSubgroup(I);
true

2.2-2 IsCongruenceSubgroupGamma0
‣ IsCongruenceSubgroupGamma0( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGamma0 (2.1-2) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-3 IsCongruenceSubgroupGammaUpper0
‣ IsCongruenceSubgroupGammaUpper0( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGammaUpper0 (2.1-3) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-4 IsCongruenceSubgroupGamma1
‣ IsCongruenceSubgroupGamma1( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGamma1 (2.1-4) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-5 IsCongruenceSubgroupGammaUpper1
‣ IsCongruenceSubgroupGammaUpper1( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGammaUpper1 (2.1-5) (or reduced to one as a result of an intersection) and returns false otherwise.

2.2-6 IsIntersectionOfCongruenceSubgroups
‣ IsIntersectionOfCongruenceSubgroups( G )( property )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by IntersectionOfCongruenceSubgroups (2.1-6) and without being one of the canonical congruence subgroups, otherwise it returns false.


gap> IsIntersectionOfCongruenceSubgroups(I);
false
gap> IsIntersectionOfCongruenceSubgroups(J);
true

2.3 Attributes of congruence subgroups

The next three attributes store key properties of congruence subgroups.

2.3-1 LevelOfCongruenceSubgroup
‣ LevelOfCongruenceSubgroup( G )( attribute )

Stores the level of the congruence subgroup G. The (arithmetic) level of a congruence subgroup G is the smallest positive number N such that G contains the principal congruence subgroup of level N.


gap> LevelOfCongruenceSubgroup(G_8);
8
gap> LevelOfCongruenceSubgroup(G1_6);
6
gap> LevelOfCongruenceSubgroup(I);
4
gap> LevelOfCongruenceSubgroup(J);
12

2.3-2 IndexInSL2Z
‣ IndexInSL2Z( G )( attribute )

Stores the index of the congruence subgroup G in \(SL_2(ℤ)\).


gap> IndexInSL2Z(G_8);
384
gap> G_2:=PrincipalCongruenceSubgroup(2);
<principal congruence subgroup of level 2 in SL_2(Z)>
gap> IndexInSL2Z(G_2);
12
gap> IndexInSL2Z(GU1_4);
12

2.3-3 DefiningCongruenceSubgroups
‣ DefiningCongruenceSubgroups( G )( attribute )

Returns: list of congruence subgroups

For an intersection of congruence subgroups, returns the list of congruence subgroups forming this intersection. For a canonical congruence subgroup returns a list of length one containing that subgroup.


gap> DefiningCongruenceSubgroups(J);
[ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>,
  <congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ]
gap> P:=PrincipalCongruenceSubgroup(6);
<principal congruence subgroup of level 6 in SL_2(Z)>
gap> Q:=PrincipalCongruenceSubgroup(10); 
<principal congruence subgroup of level 10 in SL_2(Z)>
gap> G:=IntersectionOfCongruenceSubgroups(Q,P);  
<principal congruence subgroup of level 30 in SL_2(Z)>
gap> DefiningCongruenceSubgroups(G);
[ <principal congruence subgroup of level 30 in SL_2(Z)> ] 

2.4 Operations for congruence subgroups

Congruence installs several special methods for operations already available in GAP.

2.4-1 Random
‣ Random( G )( operation )
‣ Random( G, m )( operation )

For a congruence subgroup G in the category IsCongruenceSubgroup, returns random element. In the two-argument form, the second parameter will control the absolute value of randomly selected entries of the matrix.


gap> Random(G_2) in G_2;
true
gap> Random(G_8,2) in G_8;
true

2.4-2 \in
‣ \in( m, G )( operation )

It is easy to implement the membership test for congruence subgroups and their intersections.


gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2);
true
gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8);
false

2.4-3 CanEasilyCompareCongruenceSubgroups
‣ CanEasilyCompareCongruenceSubgroups( G, H )( operation )

For congruence subgroups G,H in the category IsCongruenceSubgroup, returns true if G and H are of the same type listed in PrincipalCongruenceSubgroup (2.1-1) --> CongruenceSubgroupGammaUpper1 (2.1-5) and have the same LevelOfCongruenceSubgroup (2.3-1) or if G and H are of the type IntersectionOfCongruenceSubgroups (2.1-6) and the groups from DefiningCongruenceSubgroups (2.3-3) are in one to one correspondence, otherwise it returns false.


gap> CanEasilyCompareCongruenceSubgroups(G_8,I);
false

2.4-4 IsSubset
‣ IsSubset( G, H )( operation )

Congruence provides methods for IsSubset for congruence subgroups. IsSubset returns true if H is a subset of G. These methods make it possible to use IsSubgroup operation for congruence subgroups.


gap> IsSubset(G_2,G_8);
true
gap> IsSubset(G_8,G_2);
false
gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];;
gap> g1:=List(f, t -> t(2));;
gap> g2:=List(f, t -> t(4));;
gap> for g in g2 do
> Print( List( g1, x -> IsSubgroup(x,g) ), "\n");
> od;
[ true, true, true, true, true ]
[ false, true, false, true, false ]
[ false, false, true, false, true ]
[ false, false, false, true, false ]
[ false, false, false, false, true ]

2.4-5 Index
‣ Index( G, H )( operation )

If a congruence subgroup H is a subgroup of a congruence subgroup G, we can easily compute the index of H in G, since we know the index of both subgroups in \(SL_2(ℤ)\).


gap> Index(G_2,G_8);
32

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap5.html000644 000766 000024 00000007167 14376366051 016330 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 5: Service functions of the Congruence package
Goto Chapter: Top 1 2 3 4 5 Bib Ind

5 Service functions of the Congruence package

5.1 Additional information displayed by Congruence algorithms

5.1-1 InfoCongruence
‣ InfoCongruence( info class )

InfoCongruence is a special Info class for Congruence algorithms. It has 3 levels: 0, 1 (default) and 2. To change the info level to k, use the command SetInfoLevel(InfoCongruence, k).

In the example below we use this mechanism to see more details during the Farey symbol construction for a congruence subgroup.

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/manual.bib000644 000766 000024 00000005530 14376366031 016363 0ustar00obk1staff000000 000000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %W manual.bib Congruence documentation Ann Dooms %W Eric Jespers %W Olexandr Konovalov %% Helena Verrill %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @article {LLT-Hecke, AUTHOR = {Lang, Mong-Lung and Lim, Chong-Hai and Tan, Ser Peow}, TITLE = {Independent generators for congruence subgroups of {H}ecke groups}, JOURNAL = {Math. Z.}, FJOURNAL = {Mathematische Zeitschrift}, VOLUME = {220}, YEAR = {1995}, NUMBER = {4}, PAGES = {569--594}, ISSN = {0025-5874}, CODEN = {MAZEAX}, MRCLASS = {11F06 (30F35)}, MRNUMBER = {MR1363856 (96k:11049)}, MRREVIEWER = {O. V. Shvartsman}, } @article {LLT-Algorithm, AUTHOR = {Lang, Mong-Lung and Lim, Chong-Hai and Tan, Ser Peow}, TITLE = {An algorithm for determining if a subgroup of the modular group is congruence}, JOURNAL = {J. London Math. Soc. (2)}, FJOURNAL = {Journal of the London Mathematical Society. Second Series}, VOLUME = {51}, YEAR = {1995}, NUMBER = {3}, PAGES = {491--502}, ISSN = {0024-6107}, CODEN = {JLMSAK}, MRCLASS = {11F06 (20H10 30F35)}, MRNUMBER = {MR1332886 (96f:11064)}, MRREVIEWER = {B. Sury}, } @article {CLT, AUTHOR = {Chan, Shih-Ping and Lang, Mong-Lung and Lim, Chong-Hai and Tan, Ser Peow}, TITLE = {Special polygons for subgroups of the modular group and applications}, JOURNAL = {Internat. J. Math.}, FJOURNAL = {International Journal of Mathematics}, VOLUME = {4}, YEAR = {1993}, NUMBER = {1}, PAGES = {11--34}, ISSN = {0129-167X}, MRCLASS = {11F06 (20H05)}, MRNUMBER = {MR1209958 (94j:11045)}, MRREVIEWER = {Marvin I. Knopp}, } @article {Kulkarni, AUTHOR = {Kulkarni, Ravi S.}, TITLE = {An arithmetic-geometric method in the study of the subgroups of the modular group}, JOURNAL = {Amer. J. Math.}, FJOURNAL = {American Journal of Mathematics}, VOLUME = {113}, YEAR = {1991}, NUMBER = {6}, PAGES = {1053--1133}, ISSN = {0002-9327}, CODEN = {AJMAAN}, MRCLASS = {11F06}, MRNUMBER = {MR1137534 (92i:11046)}, MRREVIEWER = {Harvey Cohn}, } @article {DoJeKo, AUTHOR = {Dooms, Ann and Jespers, Eric and Konovalov, Alexander}, TITLE = {From Farey symbols to generators for subgroups of finite index in integral group rings of finite groups}, JOURNAL = {Journal of K-Theory}, VOLUME = {6}, YEAR = {2010}, NUMBER = {2}, PAGES = {263–283}, } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %E congruence-1.2.5/doc/manual.lab000644 000766 000024 00000011314 14376366051 016364 0ustar00obk1staff000000 000000 \GAPDocLabFile{congruence} \makelabel{congruence:Title page}{}{X7D2C85EC87DD46E5} \makelabel{congruence:Abstract}{}{X7AA6C5737B711C89} \makelabel{congruence:Copyright}{}{X81488B807F2A1CF1} \makelabel{congruence:Acknowledgements}{}{X82A988D47DFAFCFA} \makelabel{congruence:Table of Contents}{}{X8537FEB07AF2BEC8} \makelabel{congruence:Introduction}{1}{X7DFB63A97E67C0A1} \makelabel{congruence:General aims of Congruence package}{1.1}{X80AE633F82C4D9BF} \makelabel{congruence:Installation and system requirements}{1.2}{X7DB566D5785B7DBC} \makelabel{congruence:Construction of congruence subgroups}{2}{X7B010EE67FACF45E} \makelabel{congruence:Construction of congruence subgroups}{2.1}{X7B010EE67FACF45E} \makelabel{congruence:Properties of congruence subgroups}{2.2}{X8267F261874959E5} \makelabel{congruence:Attributes of congruence subgroups}{2.3}{X8664A60E875EA5DE} \makelabel{congruence:Operations for congruence subgroups}{2.4}{X7B15B49583DC9EF5} \makelabel{congruence:Farey symbols and their properties}{3}{X85CABB30818CD99C} \makelabel{congruence:Construction of Farey symbols}{3.1}{X7B7B81E584CCA30C} \makelabel{congruence:Properties of Farey symbols}{3.2}{X8016C45082AEC784} \makelabel{congruence:Farey symbols for congruence subgroups}{4}{X831C60277F7D80B2} \makelabel{congruence:Computation of the Farey symbol for a finite index subgroup}{4.1}{X7F43DB8B803F313F} \makelabel{congruence:Computation of generators of a finite index subgroup from its Farey symbol}{4.2}{X80AE179D869BEE90} \makelabel{congruence:Other properties derived from Farey symbols}{4.3}{X7C5AB1D786207745} \makelabel{congruence:Service functions of the Congruence package}{5}{X82C56A367A418E7C} \makelabel{congruence:Additional information displayed by Congruence algorithms}{5.1}{X86D04EE08437C320} \makelabel{congruence:Bibliography}{Bib}{X7A6F98FD85F02BFE} \makelabel{congruence:References}{Bib}{X7A6F98FD85F02BFE} \makelabel{congruence:Index}{Ind}{X83A0356F839C696F} \makelabel{congruence:Congruence package}{}{X7AA6C5737B711C89} \makelabel{congruence:IsCongruenceSubgroup}{1.1}{X80AE633F82C4D9BF} \makelabel{congruence:IsCongruenceSubgroup}{2}{X7B010EE67FACF45E} \makelabel{congruence:PrincipalCongruenceSubgroup}{2.1.1}{X7A61F693873F7136} \makelabel{congruence:CongruenceSubgroupGamma0}{2.1.2}{X7B8DB77B81BE58D7} \makelabel{congruence:CongruenceSubgroupGammaUpper0}{2.1.3}{X7B4FBED17ECE2A7F} \makelabel{congruence:CongruenceSubgroupGamma1}{2.1.4}{X7CFDC47279AC0E85} \makelabel{congruence:CongruenceSubgroupGammaUpper1}{2.1.5}{X7C3FCDD878FE57ED} \makelabel{congruence:IntersectionOfCongruenceSubgroups}{2.1.6}{X7FE839377D7F45EB} \makelabel{congruence:Intersection}{2.1.6}{X7FE839377D7F45EB} \makelabel{congruence:IsPrincipalCongruenceSubgroup}{2.2.1}{X828F7E08787650DC} \makelabel{congruence:IsCongruenceSubgroupGamma0}{2.2.2}{X85124A697E826AB4} \makelabel{congruence:IsCongruenceSubgroupGammaUpper0}{2.2.3}{X7A03633C83A286F5} \makelabel{congruence:IsCongruenceSubgroupGamma1}{2.2.4}{X8262396080F3B0DD} \makelabel{congruence:IsCongruenceSubgroupGammaUpper1}{2.2.5}{X7D731035834CF878} \makelabel{congruence:IsIntersectionOfCongruenceSubgroups}{2.2.6}{X83B4E4FA7F4DFB97} \makelabel{congruence:LevelOfCongruenceSubgroup}{2.3.1}{X7D5696F584970D21} \makelabel{congruence:IndexInSL2Z}{2.3.2}{X87302F8A7E44D67B} \makelabel{congruence:DefiningCongruenceSubgroups}{2.3.3}{X7BF57D157824FFC8} \makelabel{congruence:Random one and two argument versions}{2.4.1}{X8146AC8587C65DEE} \makelabel{congruence:Random}{2.4.1}{X8146AC8587C65DEE} \makelabel{congruence:CanEasilyCompareCongruenceSubgroups}{2.4.3}{X7FC5BF527931FF4C} \makelabel{congruence:IsSubset}{2.4.4}{X79CA175481F8105F} \makelabel{congruence:Index}{2.4.5}{X83A0356F839C696F} \makelabel{congruence:IsFareySymbol}{3}{X85CABB30818CD99C} \makelabel{congruence:IsFareySymbolDefaultRep}{3}{X85CABB30818CD99C} \makelabel{congruence:FareySymbolByData}{3.1.1}{X7F8F5919870A46FE} \makelabel{congruence:IsValidFareySymbol}{3.1.2}{X845F9BA182F4E73B} \makelabel{congruence:GeneralizedFareySequence}{3.2.1}{X8245766978F02751} \makelabel{congruence:NumeratorOfGFSElement}{3.2.2}{X80BB58E58492D103} \makelabel{congruence:DenominatorOfGFSElement}{3.2.3}{X87477604878BCD42} \makelabel{congruence:LabelsOfFareySymbol}{3.2.4}{X83C941047D486000} \makelabel{congruence:FareySymbol}{4.1.1}{X8594896287DCFE8D} \makelabel{congruence:MatrixByEvenInterval}{4.2.1}{X8790C1498107A39A} \makelabel{congruence:MatrixByOddInterval}{4.2.2}{X78779BDF7A1DB4AE} \makelabel{congruence:MatrixByFreePairOfIntervals}{4.2.3}{X7F792846795E3A63} \makelabel{congruence:GeneratorsByFareySymbol}{4.2.4}{X7905B050800E4416} \makelabel{congruence:GeneratorsOfGroup}{4.2.5}{X79C44528864044C5} \makelabel{congruence:IndexInPSL2ZByFareySymbol}{4.3.1}{X80EED34183408106} \makelabel{congruence:InfoCongruence}{5.1.1}{X83B2A8607C2E6A38} congruence-1.2.5/doc/chapBib.txt000644 000766 000024 00000001720 14376366045 016523 0ustar00obk1staff000000 000000 References [CLLT93] Chan, S.-P., Lang, M.-L., Lim, C.-H. and Tan, S. P., Special polygons for subgroups of the modular group and applications, Internat. J. Math., 4, 1 (1993), 11--34. [Kul91] Kulkarni, R. S., An arithmetic-geometric method in the study of the subgroups of the modular group, Amer. J. Math., 113, 6 (1991), 1053--1133. [LLT95a] Lang, M.-L., Lim, C.-H. and Tan, S. P., An algorithm for determining if a subgroup of the modular group is congruence, J. London Math. Soc. (2), 51, 3 (1995), 491--502. [LLT95b] Lang, M.-L., Lim, C.-H. and Tan, S. P., Independent generators for congruence subgroups of Hecke groups, Math. Z., 220, 4 (1995), 569--594.  congruence-1.2.5/doc/farey.xml000644 000766 000024 00000010732 14376366031 016260 0ustar00obk1staff000000 000000 Farey symbols and their properties IsFareySymbol IsFareySymbolDefaultRep A Farey symbol is a compact and useful way to represent a subgroup of finite index in SL_2(&ZZ;) from which one can deduce independent generators for this subgroup. It consists of two components, namely a so-called generalised Farey sequence (gfs) and an ordered list of labels, giving additional structure to the gfs.

A generalised Farey sequence (g.F.S.) is an ordered list of the form { -infinity, x_0, x_1, ... , x_n, infinity }, where

1. the x_i = a_i/b_i are rational numbers in reduced form arranged in increasing order for i = 0, ... , n;

2. x_0, ... , x_n \in Z, and some x_i = 0;

3. we define x_{-1}=-infinity=-1/0 and x_{n+1}=infinity=1/0;

4. a_{i+1}b_{i}-a_{i}b_{i+1}=1 for i=-1, ... ,n.

The ordered list of labels of a Farey symbol gives an additional structure to the gfs. The labels correspond to each consecutive pair of x_i's and are of the following types:

1. even,

2. odd,

3. a natural number, which occurs in the list of labels exactly twice or not at all.

Note that the actual values of numerical labels are not important; it is the pairing of two intervals that matters.

The package &Congruence; provides functions to construct Farey symbols by the given generalised Farey sequence and corresponding list of labels. The returned Farey symbol will belong to the category IsFareySymbol and will have the representation IsFareySymbolDefaultRep.

Construction of Farey symbols This constructor creates the Farey symbol with the given generalized Farey sequence and list of labels. It also checks conditions from the definition of Farey symbol and returns an error if they are not satisfied. The data used to create the Farey symbol are stored as its attributes and . fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]); [ infinity, 0, 1, 2, infinity ] [ 1, 2, 2, 1 ] ]]> This function is used in to validate its output. IsValidFareySymbol(fs); true ]]>
Properties of Farey symbols Returns the generalized Farey sequence gfs of the Farey symbol. GeneralizedFareySequence(fs); [ infinity, 0, 1, 2, infinity ] ]]> integer Returns the numerator of the i-th term of the generalised Farey sequence gfs: for the 1st infinite entry returns -1, for the last one returns 1, for all other entries returns the usual numerator. List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i)); [ -1, 0, 1, 2, 1 ] ]]> integer Returns the denominator of the i-th term of the generalised Farey sequence gfs: for both infinite entries returns 0, for the other ones returns the usual denominator. List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i)); [ 0, 1, 1, 1, 0 ] ]]> Returns the list of labels of the Farey symbol. This list has "odd", "even" and paired integers as entries. LabelsOfFareySymbol(fs); [ 1, 2, 2, 1 ] ]]>
congruence-1.2.5/doc/manual.xml000644 000766 000024 00000006711 14376366031 016431 0ustar00obk1staff000000 000000 Congruence"> <#Include Label="PKGVERSIONDATA"> ] > &Congruence; Congruence subgroups of SL_2(&ZZ;) Version &VERSION; Ann Dooms andooms@vub.ac.be http://homepages.vub.ac.be/˜andooms
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium
Eric Jespers efjesper@vub.ac.be http://homepages.vub.ac.be/˜efjesper
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium
Olexandr Konovalov obk1@st-andrews.ac.uk https://alex-konovalov.github.io/
School of Computer Science
University of St Andrews
Jack Cole Building, North Haugh,
St Andrews, Fife, KY16 9SX, Scotland
Helena Verrill verrill@math.lsu.edu http://www.math.lsu.edu/˜verrill/
Department of Mathematics
Louisiana State University
Baton Rouge, Louisiana, 70803-4918
USA
&RELEASEDATE; &Congruence; package The &GAP; package &Congruence; provides functionality to work with congruence subgroups of SL_2(&ZZ;). ©right; 2006-&RELEASEYEAR; by Ann Dooms, Eric Jespers, Olexandr Konovalov and Helena Verrill.

&Congruence; 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. For details, see the FSF's own site https://www.gnu.org/licenses/gpl.html.

If you obtained &Congruence;, we would be grateful for a short notification sent to one of the authors.

If you publish a result which was partially obtained with the usage of &Congruence;, please cite it in the following form:

A. Dooms, E. Jespers, O. Konovalov and H. Verrill. Congruence --- Congruence subgroups of SL_2(&ZZ;), Version &VERSION;; &RELEASEYEAR; (https://gap-packages.github.io/congruence/). We are very grateful to Mong-Lung Lang, Chong-Hai Lim and Ser Peow Tan for their comments provided while implementing algorithms from and , and to Francqui Stichting (Belgium) for the support of the third author. <#Include SYSTEM "intro.xml"> <#Include SYSTEM "cong.xml"> <#Include SYSTEM "farey.xml"> <#Include SYSTEM "gens.xml"> <#Include SYSTEM "service.xml"> congruence-1.2.5/doc/rainbow.js000644 000766 000024 00000005336 14376366051 016435 0ustar00obk1staff000000 000000 function randchar(str) { var i = Math.floor(Math.random() * str.length); while (i == str.length) i = Math.floor(Math.random() * str.length); return str[i]; } hexdigits = "0123456789abcdef"; function randlight() { return randchar("cdef")+randchar(hexdigits)+ randchar("cdef")+randchar(hexdigits)+ randchar("cdef")+randchar(hexdigits) } function randdark() { return randchar("012345789")+randchar(hexdigits)+ randchar("012345789")+randchar(hexdigits)+ randchar("102345789")+randchar(hexdigits) } document.write('\n'); congruence-1.2.5/doc/grprings.xml000644 000766 000024 00000000300 14376366031 016773 0ustar00obk1staff000000 000000 Generators for U(ZG) up to finite index See . congruence-1.2.5/doc/manual.pdf000644 000766 000024 00000715316 14376366051 016414 0ustar00obk1staff000000 000000 %PDF-1.5 %ÐÔÅØ 89 0 obj << /Length 926 /Filter /FlateDecode >> stream xÚíVMsÛ6½ûWð(Θ Ò'[‰Œ“´Hé´is $˜BL~Hõ%¿½KTDGvÒÆ™^zrvß¾Ý} €z™G½'ôçdv2¾ŠÀ gÞìÆÁç¡IF{³¥÷Çè™)²²QÅBùf×èÂ<Kh]“˜G^ÀC"|á0AGU3ÏJâ‘i6•ýdnš8DcR2ä×áLý ½v†ÒIˆ°3Œ—£ Ž'³vt˜ ‘w`õ'Ô†rhìã¾?&(zÄ=±A=8%LâS’XXÛ_}©²Ò¦°ÙaD|΋bµpy%X’ 'Î ët¥æe“–wöQÆ÷ ð0êzˆXŒy#À]Ò…‹ûܘuÕz¡ %ÒND˜X³ËR/¬Ýµb¤ª r¶ÖÈ‹r°æŽÖϹú+-–¥õxå312…ñ޶í_š»uëϰ&Q8ŒöRåªH­7VˆR¬P©ó|ŸT‚¥`QWT‚$Iâ""a«€ãYuÕüì&¡2ì;v¹Nu~ÖšPB=ûVfÞðÃÛídÐ$†òq„Y·Ï·Íœ¤ 2WÔÍÕ=AŒâàì^îf­6i¦þ%Y QOgU×›³ñxå0+‚¼|YjãOŽí£à€ãÅrYªª:óŽ}|ŽØe½VE½Ÿßîù&­WjÖzQº^–ú£›ûw…ne±íÔ„ò¯•v©*ÕõÚã1´ $éÅõK®t‘§©ë0;¸õ¡&´ãl×*Ït³>¦ž}€ˆHÊ¿¢õû’XôôR7»˜ß*"¤‡ÿˆzºÿ«Èªˆýã=ð^±NXüô²2ó[8¯ê %¥vUÛ¾Ûxûh߀áqgÅáîþäâªP])–+¸Å mÓY™-Ét½ÂÐfüÊš.VÆäCU=3ëMS+×éB÷—+1Ë2»¢Mè.ÚÒ¶–;{6Ò!Ìuº¸íÃçNÁ“FçK]dNp?™²^ÙåË´ÉV§ÇpŽ„sîWúF¹å«ß!²«dúÛiŸ§©sìÿƒnóÆã´¿|å>ìC$ðN!ž^µ[ñw€É«†¨eó¨> stream xÚ­Ë’Û6ì¾_¡[¥™šæCÏä´I㤩Ûdºn;Ó$Ù¦eNdÉÕ#îþ}‚²¥³Ó¤=x ˆ7`î÷^Þ<[ÝÌ‚Ç^²„ oµód"™HS/‰ËDè­¶Þ;ÿy]à~ÌDä÷ºÚèàÃêõ|'žà,ãÝ ãY ¢í-‰<7ܽÌÒ!S!œÀ< UÌ’Hx3±4ŽèÎíºíš|ÓÅg,‹eŒ¸7“’IÀYÎÕÞé ø˜K€)©TxyûöŠ$©X¤ÄÀsÌ7óâª0ÐLȳ=yár'ŠY BáMó'³Õm0“÷w}µéL]å¥éî ÕÕtžPzÝ|t_¦Û´‡zÏ~·ýºhêþè$Ö;§F4¶1ŒÑ Ç]0KýåYÝ„©D*ë/Îbo&XÄÃQÔæ‹DŒ„…‘7bzÏ#N|áÄ_6îÉ?¯ŠYÊ„ˆ+œaŽáAêð”ÅR'Q,“Ñžã}cŠýc¹»—%¼l}'9g’KEŸk‘Ûª"à‡º>´ßü¢1‚^ëö¨›ÿ¦Ôã¿ójÛæ§@E~]Qèùyé`KF^éRW9Á¿B_7)Kv5³c–©b…Å_™’I.5˜6aêï­ jë]gs/oôSDeþ}Ým“W4zk 6Í:Üï;wÕtt‚Ióº!øPoÍî~Jï«­vänïîvº98] …§´—¿üæ]é&/Ñ*nL[r ûÛ~]Ú¸å/ÍFW­¦e é‘¡Ýë-¡mˆá¤§X€ónäGèՠ|Ž%‹¾`j(Lk 0|BH BÒa ‘çWœj˜2‹œ°XGyG0¸Üaë#¾6”&ïØ`¼éµÌ;í’n¤ f Ì íy«»Ü”CζÚõR€ÅÝâ» Šü¡©`Úž\´¦ÓÔÌ÷èE¡×Þñ«mó|܆ ¿Ès«Ýwݱ}2ŸŸN'VT=«È^^’oÚyq,Ù¾;”Ǥ 2ÅÂ$™4˜!)“©£~Ü‘ö”ËhÓ\PA"\©®X1˯lõВĹ®œgOzÜÌûÒ•úÚ¡‹"¶ëK7 †è¸&Ðîë¦#°ª;óžs¹±©7D­ê¦#£®ôyLã™÷kÌÅ8I?w’Š„€+úÈéhtÛ—Á§½Ù8*ÕIëîåMgò²¼§Ï³Ÿ‰ÓÎ1„¬nô-\âÝ]‹†L†ê?†C…Â?–:oÝ[Lc g©.šQE0Y²xÚewuYR=ÐcÜች2iËõ4L• ÿ…Å…£ÙØ7Žó‘‰d;1ðö+ÇeZLÇ¿ä,M'6¼þ^Ê„>¤ØÝ"±ëá~(L-<¿¼C¤P<*¥5"z|½Óÿ½FD„Œ’ÁF7TKă61¸¬=—š`’EO¯eY {ÕùñËê0Øò =2b‰ öÈ"?ΆÕTø-+ Œú53õü²Îk”Rd°$©±›®oSŠcï˦ÛÔíæ#f#ô±Ro }€ÎÓ~a±BO ºõGr3)iˆª8Ó=¡/ iØÇû3Ø4[öX^ˆ^æU’)ÿùI¯rCŒKs * ÀÜáDà­¦"%ú UÁåI¶ÏÚ÷öÚ8öM} «,a´¨oÏSþ'„Y­¯D{ÒØ7h*xÕv•b±uñÁu9vM} Ê»™ðÂrdÒ_eQ>‰*P>T²€oºþL(ø7ÙEª ¨¼hòjóWo{×AË¿XŠYþL—…é¶îÈ\ë]áÚèßµýñxžkŸ ªnošíxfáÂ&êç‹ÕÍ?t´· endstream endobj 136 0 obj << /Length 898 /Filter /FlateDecode >> stream xÚݘMsÚ0†ïü íƒUI–dë˜vJ&½¤“rK{0XOÁ¦²È„_aÙ)&4 ÛÈ‘G»ïêYiXnG¨n?OFŸÆœBaGLæ â… pÊaHc0IÁ£÷¥ÈµÌuéÿš|!ˆ€ý1FZ€ö·vHŒ @¢€S"aGÃàö h7x 0BȻ˵òqìéf¦³"?s}€†F ›—jjz¾Ѿ%†qBFCàÙ¦0äÝÊ\ªdéļ$Ùª´OÅ|7Ƨ1F­E© Íº #OùfÞFæ3i{µ—É $(l:­“Ùïd!]]ö„!ó 0ãÿ+h*óþ-Þ8€7:7Ñ~Òx£+‹7ïòR'ËeRÅ©U9OíC¹-µ\Ùg%ÿl2%WjÏ<†¢+Ò& B•(r–è*6€â†]”Õ‚´˜=UjUc¥ÙŠU;3»MÙMfÕÛL–B›uÉA„{¬#z3÷ã’8ÇÑÐnFÒøÚ’¹2Šâ‹ïªXK¥3Y^L’˜’Џ·2¡ƒ27Z«lêämôÕøƒ€\ôV‡:¨sovM•akeæ…^ƒë«Õ3£ Æ—È®¡Cvû„yI•5å¶9­¦Å²<8é'™Õ®m’m¸èžhÍ#öp8`¦ Ê´cïÜ!wÍ;œÍäX\9\C7ìÉ“p<<¤`"ÆW/Øi݆=ÐÇÇ/ì}3ß}7]ô8ã#ÆøèaµåŽäY­7:y ƒ×}GÛüDˆä™®;gyZu|içÖì²´`ƒñxÀÆ$ïÉêÄ’ÿа¨J?ºPqòµ•Iu!Óå)a;¨Ã»x9êíe—óù½ é×CÞ©TÙn“?ï|!ÓC— ÊtzP—€2s€ò£FÞsÖ€v¾Ég{ç÷}NÙŠ&n‘D02HÜ«ƒªýògk±Ü¬5½˟8&{u­ãȬ٬¬ãÌ ç7išíœÔ”‹³ÜðyµG–4+×ËdÛÄøt{´ˆŒcnžûU‘“å¢P™~Zu©@ÄÑ…«½&Êù«TÝ£œp© ÖuçAÎ¥=MG•í™iˆ!¼qÁg:MÏÖŽº3ÌyÒúü&è&Pc&úkÝØêN_'£¿9‹‹Œ endstream endobj 146 0 obj << /Length 1932 /Filter /FlateDecode >> stream xÚ­XKsÛ6¾ûWpz¢f*‚әδƓ6‡4q/Ms $XâD"U>ê8¿¾^)Ó‰÷`ãÁÅb±owE£mD£« êÇŸ¯/._¦<┤)—ÑõM”¥D ¥’Áóèz½ÙÇN7‹%—4f‹׿]PB£ð×l£ñòí•gšLeÌ0¥Ñ2ɉbÂñ{UuÍ‚©¸Þô뮬+ÇÑËdϲ„ˆ£;+3pògyŒÑû%£”ÆWºÒM±w’å¡u³úÆðÀMl|‚P•ãF÷êºÚ6½®ÖÚOÄRáŠÚc±þXlõùC²ˆQ’ÓÜ*aÉ¡f…,¡•¸ƒ×;ÏÑ 1Ë c*°¿úé—aBÄ%aùœ ÷؉Œ¨¥yÙ‚Ñe2?qr(e$åƒ:ŽM½õ¿åFC‹,Ï⛾²æ³KwµÛ^c§k`Y·Ý.X¬',ÁŒÅÖ öÄÝ1ð‚EìÖº¨êª\; ËkdƒhÉA”€ ™ R:ÁÚ~µmêþèm[Vþ-rü©àBÃ[Þ-–*~=¼9#yFÚñdhn‰A¤Ž–;2ØmÄ.! rDõ7•Ô&Ù” ®ýkŽü((À†Í™Â°Ì÷½wçjã'û¶oG˜¶:XÅ»º#rÃß”òªì´[Uýaâ:¶ýzf^±Ä)?$UNõ‰G†—}Óíts¨m¤2.;3²¸<÷ú «®uk¹I±ßÖMÙínyS7n²µ¡Ú•pM¬yüÒx[Ñh3Ü9’öî°ª÷íÙÁ‘8ªÁœË¤$ÙTìAu}ëîÃüÌk€Òýµwmè‚ÆÊj£ÿªÎmø§Ô·ÕÝÑêYåÎIù§ަ^{˜ø 7ʆ^êÊo#lÜÄû•ñFÃe €åÚD›YXÉͱ±ê°‡’afÕä®/›Àgìbjx> '’ªÇE¡rQ˜=* ³¯G!~*Âeˆ¬rDš›§bD63‘à¶Æz5Ÿ½Ân(çD;j¯]3mÀµ>¸CzˆóÅ_„ÜéõG·ç)œE„TdÞŸÕ)¾3©T̆­Uâׯ9¯s¹šTøòáûogVüÌ~ ÜÄ=fgYè L7ºî÷9»Ç“Ì•ZÀÔ;L†:?¡|×-öûÂV›S¹Çˆn«RýO_º‰ ¿iMwVXÑI5÷ØÂŠ£€¤4dÝ”¯rµàHKñxaáÖ¿ÚßEB9?w=&ò ÚJÜÇ{º¢!ÛÏsò îU\œÊ‹9f)á,³Z}æ³¼r’¤O`µ¼-+ò¹<ÎV=’Ð\MPÙ¾ØaaH{fb0ÃŒõª+ò®,á@$‘g~Ó`çª÷$çŽ(ƒ@»®;¶/./·Åq ƒ‡ÜÜ’-Ê›~EÊúrmÜ µK—_ì¸HI–f ³…<¼M€ŠMßôx¿“É þ¦¶å€bÍ„£ÒnÇa/`¶²À‡UYMéNpcƒ%Ê&/`Ÿ¯ÿ°¾5rÔÍGÏúª¨{ÏP>ÛhT¡:I Uºb~„þjòÌ¡>4÷q‹¼–¨,~…„Q€ ^Ý:’¢sã^­Ÿþk†œè»Î™¾ Ö§òküŠ EB¤Éë< Ž™C£n\ׇ#d^•û²»s[F#n†Ôfû¢²î½À6¢ñC—zÏ ²3·~¸Ḛ$õiÔ'Æm_ àè´Þø _¡¹šTSÜybó­­ÅD.†¶ÓîZ,Ã8‚«<¨“›z¿¯Í›o[wØsI úÊ=B×3°Q:\4ÛÒ"rùÕ9#ⱇ¢êC¾6[íûJ¡PÛ‰©FO¸jÒÑèbÔ›C”¾µyß$ ÄÜ ãiPšï,”k”•ÐNÞ˜7ëS‘ú¬äôÓ‚=S½‰$þéÆÿ £B…¢Nê7 gXŒ•éºÚÆiJ㻺wß\«€ „lºYÕrʈRòë¿>()&å°a»¯ ¿ M,ÅD«™>MOÖ|< q*ΙéìÜÑؼ°0üëõÅ? giį^É!b§?»OÁ4Ox`Ž!OB¶—‹°éF%Ø] endstream endobj 156 0 obj << /Length 1966 /Filter /FlateDecode >> stream xÚÍYÝs£6Ï_Áô Ïœe}ºÎt¦Ÿé]¯íõ’éC¯} ±éap'——þíÝ•ƒ“pñ´ÍLF2,«ýí—VZê­<êŸQ7~uy¶ø.à§$¸ò.o¼0 J(/PŒ®½Ëkï½ÿõ:ÞÖI9›sE}>ûãòõ%ÔkþË•×ýùîÜ1•$ŒB†L©7—šDL8~E^ÕånY§En™7v\ùªÜ%ù2±¿«ÝÕªœ±È/vÛÊ.ìD‡%BQ¢©n–P‚H»Àå¾—4ô·ñòC¼JðËÅwŒö¾Q‘†™V3F}@É”oE0_õ— Ѽùf[3 ¾M¯“Ê®w³Ë *ó3òëÂ>^6€íÏ*™qø ¿MÊ8s´÷Û† jÃ|çEž.ŠŽr@2oθ"Šj˜¢¤³•јÑÖ\hæ§¹C¡ G¡h`\Ìæ‘ÿ¦ERCÆ @gsD`i¹%³vØI"#áu¨~§ŠZBö ¹h—ýmŒUHø^0`ÃÆŒ€lZ#¼åðÐók‹8Ϊ¢ÁN[%A„æF³†È¿SÊó´NìË|·¹B/Ç7 aµ[®íÛV±d6…4>¼·twi–ÙY™Ì­y´ ¨Çžuê] /¸0À°‰ë2ýh熽¦†JúõŒùèË8_ƵYqU”÷Ρ…”pÙèåUõu'˜˜áäS(cœ„RuT*$`Z§<ÊSY®£²äÚ¨z`@E=!ÍCÐ䘰sr¢#Õ×Ï«êG£sˆ,y\ÚPÉ®°° µ?å­Ô8µFÙ:žqê"Î>‰ípVuš¯viµ†Á>ƒ°Þ&eòSÁ‹6iÞ¾¾['õÚø üHk7V=¶6T#8y Pe…¶FL·n…ʲyŸyÒP¯}''à{“5P"ð‹Ò>‹sKÚõÿ>7çÕÈ®ã#HÑMð9½±¯*¡}‹-q5.?/j;¹JìX&×»%z —¡qäÂN 6$0IFƒ 'lægw3€ß­l˜*Zû—³ˆZÆð¾ŽK'CíÝaJ/ÊîWZ¯{K¶Ä‹1h÷ÅÎîByb`À ½¿¬jûÃ,cVÄîuêÞ`\àxSdY¹þ®ziv¯o/Ïþ:c°õX³ÕJ¥×Ò[nÎÞÿA½kx¢¡#ïÎPn<¦C¢Bü.ó.Î~qû6õ4Ñ0&x¨ ø0ƒd¬C àÛñf›%Õg„úS–î‰ñ9a4xˆõ0Ôõ€ƒbh›=‡E#„¤„©‡Àn¦!þŽ ñé,!xD˜žÂb_6a%Ò«£ðÁ»óKkขAyÅ­¡Wñö W–™’¦[˜uCïý\C¾Ÿ}ëŠ#fÂü³}¸}†öùAwL¦ ë9X«ÔÉ*j•¸«=Ãq•1¨A¹‹ùÈhbþ¤¿qÂaœµj˜Ša¨ EO¤N¢Bõç<ýÀìl \‹`€Ö&]tF8‘vŠ^Ò­)ðYôû-Ÿ`VÇñâ Òó¯`ZÁ>„>ÕtG´4ã@MP¨A<…–„VD3WÏ^Ý[L_æ¹|SƒW­¬ëzûr±X›d U‘Û݉—ä*Yü …IÇc4ðâ8üɲÑG@>ÏI DÀ N:sI™.-ð×IµÑ¡'7òÇ€O{ˆ<ˆ„÷iCaJ©³üÏYò,XZô?yqghÎÛ}L  *ÐA ´óŽä–¬ Ú]¤H½°*0Ÿ`¥z\“ u¡"y]À‘$·ºø>É’<¶ ~MÊÒT×~pwwGàL³&Yµ#P.þ¾µ”¶f;Ž{²ÐCÜRšãð)‚_F„jç› iøÇ¡_Ý¿|Çd!†8‡s‰ì'¤³ß0{5þ úH{<{M–zœCQ¡OÄ\©ÿ(ˆ'ê‚F$'r8Ýsñ/Äðd™°¹HE'‰aJ |ïû¥En&]@éÚKN˜l¤Ø¿í 0õÐB:QA«´ó±¦ ø*¤=zØûé÷œz½ŸŸÆ{?úÑÖOi®¡iü9ë´Ó²Q“ E;\¼ÏXLŸŽb¼kÀ™ú¿vÍøSºf-b[¯\ ¶{÷Þ—ë´:ðŒÆoª´ª«~6‰3çV¦•µL^·NxS”›žG{œ2"!læøUè TÕ£ýê=ñ>Í endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 807 /Length 2328 /Filter /FlateDecode >> stream xÚµZÛrÛ8}×Wà1IU@ݸm¹¦âÉTfR›­™J²U3›òƒlÓ6×’¨%)'~™oßÓeË]lÉ(lœn4Nƒ1*WNQ®¼b§’ A™\ÃÊ2ì•\E§LPÖ ‰Ê:Æ¥²Ñ¬Udî(rxî%W0m£e•:²ü ‚»„÷L.„“ôŠŒ “Å20êŒ\€%?ŸèÊå"á‚enè£L &nrÆEÀta”¼W1¨1âW8Ïà=ÐËcQîÀQ ó6!ƒTƒÎ$¡Ç‚r›Fhf!óp.Á2œíIx' ·6ˆ7\yCÒ')o…^‰+–x"¸Ú±ÜgX† 1ƒ˜ð‰Åx=%éÌðþ1˜mq Á+VüÂp¹0¢V1Lð ù­˜ mh?¼Æ‰Û:„V4âL¸Òb:¢•™`$‰{¯²‡Q°ƒƒ•}QÙ¯Õ×Je¿¨W'Ãi[ÔÚ¼V?ý4xõqÒÖÕéì¤-«É뛢{ Í¢û¯Å¤¨‡#5,ǪÎÔûjr^ÏŠÉI¡¦Ã“Ëáy±Îˆ]ŒÙ´ÃÑh(wÕprªšë¦-ƪ.þ7+ëb\LÚæõJཌܴõ¸ 9¹EÒÌŽÏëj6mVc±‹ íj¦GóG]M‹º-‹æ9Fhnä°mëòxÖ>ÏÏü³:«ê-­,¸í|ÖÅ5¼2>®FMç¡ö¢(k5½™åj ´ŠÙ;F×½ÿ(¥Þ^L€›Àö<,@ðí$ÆÓY;\Ì4ÜAÒ™ª³rR¶…*'§Åóë¬ÛG­Ÿw‹«­ênÆ+̪³º«²mîY7XïÔß~م괨˫âtnpK~ÝÜÖ—¢¾*AåÙlr2µžœ§ä· ùðô´”;È+匎猜–Ít4¼ÂãëeÃÃÑyU—íÅx5Î7  Ÿ‹³¢–·V;ûö‹´žtû†ä«Ï*ûP¶GÒïà`}½ž*ûÓd@ÖJÆÂ/Ù碩f5†TØ7»;ÿ*NËáÏÕõ-Ñ’œ¶Øó"ÓÑv±U©ÿp2©`îr72vñ®±ó†æ Ï7oü¼ ]s4¸³³7È~®jx¼Ce¿e³÷øMôH Ÿ´ê›ñ9€avQÛN ïC«ÚzB¿/³ã6³Oåä2;<8èFÈ;³/Ù¿?”¿Wãa9j«dRGU›wW³c=<ÑÇÅk {&8ËÚ9ÑcV{옔'í ”È‘Þoî¢m§€vQ‹)ØèpÙß=ÞPzds+èrÍÐT24£]žAaqöߢÁ’Ý'‡p®ŽN2¬4®MQçf?.ðî€hÒŠW¨T2K,ëœÎ<ƒÃêøÒ¼kÚ·po]|oêìr4Öd¡MI‹l·MÔO㱑e2*~¼½¬&ÕÕpT]és$7ZVÙC® Ø Ö.$¢BÂÑ ÒÒ …(‰WE]—£Ñ;dç =jfº8íÎ!êm¤.é94ž4åîɱøýûw½Œ,û»Ç»ÌáR6ÿó¯ÿ@†k‡º#ÖÈœ“Ùht´ª§Ÿ÷¤ s€¼Óõò¿’MãʹdûÍP¢Å5ÊS^\£tý5Rmòý5¤ ‹>¨ÀºC¶› :èäKʰáüòAe_‹íýo'2¹¿¿I¥µË^$Ÿ ’‚oÞÚ¾¥ö±¨Q× TÑNj¿ˆ2…ž I{ŠO_Kç“™®êól2iŠ&;ŸŽôE;í¯.! ¡‚Ì#ðJa«“”œ:zûtçÃéÛ^5KËýV¤®\ùý@ªi5ðü–`"íN„†?øA3ªdÆDÈËB;TTd§þôéëÛÃ…ÔêÒ~ð$ˆk9PéñE¶Çoƒç·âä²XÆ‚u*‡[.é»]û5ͤ´Õ6}=ì—[uelVÉùU©BV¨¤»‡Ia9qÈŠ1ù#iäåR=L´cê0ó¹É‰Î¼ }ûvžiå4gÞö)Æö)ÆRßrßööloÏööloÏöö¨·G½=êíѺ”µE@›îÇ" »C.Œ §BУ9|àRŽ Î>ÏwÎ`ö‚"lï„4êtUl#V~† ;ÅôÃý£½¢@áàdSG—‚ÂɦN´‡ÝŽ…O, —†t ç|Ž¢NÉ­õ‰Ý?†´ ¢º‘=‘aj¿– û^AM’wRÐi5èP“„° Çþù`T¾R}ÈQ.ÊM6à ýãV'ä -ª!ÁÅÚ‡¸ï=J™#ü!å6¤¹”áÄkƒôÈ À€XÅvƨ½|XŸ9èb”­Ñ„ŒaYZ,Œb7áØæ ¥/i”5ËQ}‘Öú„÷NE¤Íî£kK"áœ6†×’Á/àò¹,04y”o8Hï+¤Úý3νâÀ±^œf€KŽ-ü´ÿà@ÝØtGPQüÂ`ݤµÑáöφ‰Ú`ɶzH¢Óz§¸}GO†M^çòQ IÜÈçAl.aoöÉÅD@DùÔˆ¸C¥k»*Ò®#cqì»$ãiûB‚Ü“––ôþ=s„ð\ýÎõ;ï¨ß©×ÓÜëiîõ4÷zšwÔÓ÷ Di‘êŒÕe%û¬È:ŒxÉ>±@Ü ‹§>½Áâ±K‚á­°¼@ñL"ÝÝàaƒð„{7âyÿéëþP°lΖoQ„\³u›Qüs6ºÖ“r%”Íç0)A;ÊΘkj‚¢—ãvvýŽô’1²ðyûÁ[æˆ}ËþúZxÍmÕ•’é¾±lÕ –é6éoùœtu*Üâ¸CR“qfo‡îaòtÏIžKT¹ÍóbÝ{e endstream endobj 169 0 obj << /Length 1824 /Filter /FlateDecode >> stream xÚåZÛnÛF}×Wð‘BÅÉÎÞ7mòÐ41äÒÆ~ŠcŒLÛ$Y•ä$ýûÎòfR¤Sb}(’ÃÙÙ³gggyÈ‚›€'ƒßÏO^!Ógg×7ÐÚÀh‡28» ÎÃwó›!²p9ŒP…÷É|œ /ÎÞ¾ló!è£$R+ä¬÷qÕÊ*Ì–&1a!:NæëdHL¿I–+F•Ïn‹»Ëd}¿œ'Wé© o–w÷‹üÖ·Étšÿ½‡D©¯ÞMñà:waÂÅòn‘,×ÿäÃ+\mÌœ£¡2uò½^ý¹œÌÇ“‘韑Ët"žÞÉ"hëŸÖÀY9Ÿ™bÙœd?Eã°¼ ê>ž Èšñ«6…3éÅ—gƒ¿H×Y€”-@ hâd<Ïç,¸¢{~& Ê ßRËAn@ÿÜ48ü•¥ Í<ù5×Yr „&g4Ëùýò{<[L“fË‚# M¬=š®…oÒð .Êy;|0b•³®áAÑœTqQÁ)+*·ÛRr¦Y¸5Š|a ÁdQïꤢ OZÆÚ‘GKñ¢›ý&^<ÏIê+œ¤þªR’FŠ«ðäÒ>}–ÍŽ!†‹¸erxæ[ÏÝ_7ù¿%Ô‚ò5®•ðvƦ /#{Ùe„¶ƒÇ-ù<ùm‘g JC›±‡‚PÉÖìôÒªHéÙÝuvœ&_“ôÚìÊdžOß^rß'ßóæ ,QéÜ¥*ÊZ²Ç!räÈîKº×«“‚XÄ?B¸7vu¡‰#¥°}°KYŠœçìZÓ¬ÚN€î­6§’PÚc@[ Åqo¼‹×ËÉw¢Ÿ_ú£Ag(šh*Š÷C¥ñq4èÜj3pI™cÑ€*dT{¯>LfÉ|5¹›¸&”œø „è JWN%öCAõ!Ë÷‡|:7ÙŒ5hÍÄ΀˽Ùðî~ºž,¦“q¼&6L¾&ï“ûõ2ž¾œ&D“uïœè M]FDJƒ}p‚Yà.çÄyV=äeG–•£Ú]–Ÿbv¸(ÛYÕ9èF¿¥£ý¡:«¤Ó´§Ù›UæIÊœÞxÓ½óMü¨00®ÞH+éx ÞtºÙoª¬<o É÷.RÏÏqÄ/Fçb$)]\Ô {JDý©3"MP©¼°¶2i’–ɲëxºÚQªto¶9UNà‘è )n<ˆ–è`Gšè ~:CÒD•ª gt/|”©\»·Ú œ#m—ŽE.A³½éà7öOŸ¾õK #^Ï׉åÙß2Ó& ÌÓý09h•3¡èvµÏ;˜Ñ9ŠFG„3´ƒ:3íØÛV_œ3ƒR¡¢Ì¤_-ÔhÊf¢öÑB<ŒœVù7‘‚ªõƒˆ’Æõ_Z«)þsrM+ÝÿTü7?ÿÝDü/—¿*$õe¡µs”2ùCòé®üónÊ?Rê²'å­/1«üïÑt£B«ÁO³ê¡\A èSþñQ„¡iôå‘”Ô ¬Ø[ùg—òé³U»Y1ÉÞ6-Ý‘i‚«¨j¶½(0”—ÀšB÷¯T…ÊO˜<ýÍ"Rˆ.0Ê^±v•ý»÷¨ а4ïÅaÄ?ÀG^”vIû»()yÀÝ67Eåæ$?þ !"Ý endstream endobj 181 0 obj << /Length 1560 /Filter /FlateDecode >> stream xÚíZYoÛF~ׯà#…–›½·GZ$F‹ @må%njÈ2# ,U’ëößw–äòÖAQ0@x ¿™ëó†Ó€WƒŸFƒ7ïª@«)£/ÓŒ€1V@,ˆ`ô܆?/Ÿ¦C áz Ÿã§I<ü<úõÍ{¥ ÄR›~+€Pk:ùJ;™ÍÖBa‚JÉœp$¸"ZBqIŒ’é7¸8áéw„þßz”o¯¯Ám”ÒD³u¢ÐÍóýt=.ŸWWãÅbüqµŠ×´¢Ã~Lt…àe{h1¼žêFR›Û²»orYôUˆ*UÕùƒJšÁ éee €ò@¿µ®%‰â¹{ ò](m ‚Bt‰ ·³å“ÿ¢¼'• Œ¸±ÄHvëd'Œëxû¼~Ú #&i¸}ŒÓ‹Injz¿yNͦb°„æÆ]µ¨­ˆÔ&àĪT&ó’®8Iaj™KîĪ2Îj¾¬BáÊZ]YRn¡Lfù%µs™ ÿb"ÄóÖ­ÄxæP_½ l‰bÚKÌžÚLÀTa˜™ÌÍ02ᇿ¡˜¢&ˆð‡ë,‡v¹ƒ»*\'ôN×}jwÓüëL.”d•ÂOÑî8‘¦ïF³M-‚||mf›möÎ{<Ÿ§‹ñv=›Äµ×yt~Y®~sDÅ­ÚU "K„2ÞÆZ·€ X  ‘6«Oãa„õ75R4¼OÌ¢DAÕ¤‰+“Æ„­pNýÇ°Ô ‘+ÀÛœ1æ`q{¹ÅxÍvîå1^Çmú¢†<¬Æmˆ’)½Ä·m Œè"4ïwaˆƒy𴇇üx=Ú0kб¹¹è“À̧mìÒs¯7dq£Ì¿]'Õ,~Hnu˜E\òêeæ¢+¹|Ͳ<{´Í t¸Z»’ºý·µFG“[ׂü—MÞ\[H›U³Q5,ÔÓ–•‹y­7J܉J's’þˆ­”ùVš•û,]“l¼ þ¸ HÀnO$—´Œ(,y“Åàö3 ð‹oŽà%‘\ Ó5Vj÷Ý<¸üžŽŠbE³Š©t‚°„s…`@ŒÍðîŸñb5›+s×®”=eéŠúÚ©ÝKb1܃A1®,MA&¹€>^ Ü3)ù~„tÚ­E ¯†’XµtˆR ¡uÕ Â×W-{mÑ ¾nx1Y1›ŽWo³(ußUæ­òƒtŠ“ØL¯>Ò;öÝé”–ƹæìÄ\_O‚úú¸¯\îãÎjúXr¢ë±ÛƒÒµÆ,Y~(ÏVÎA®3:Ï$¥Ê=¨½ÞO>rr‰ü͇;÷”~r¯Þ6³0wJg‹šNA Œîÿ=0¼Ü`=éW N‡ðõ–À=B`¦²VO+LɃQ¬«¢ Iâ<4 ^…!QÛ¤H®VÂv³#AËóúnv¤±#$"ôWJÊS>ì&H­Sþ… ]ÒQIb_; ’n¤ ?jJŒ’|/¿iÛJl‡¶”ÜŽ[!ÑâLèǪ‘¬T¬•\ µÒE%8›Jít›…Ų|ɧ§sêBç¾2:'`s­Éî <+Jew"'º9®%Î%úî§Ž§s *Gò¹–nŒr 6Ù>“Üé^ÌWÀß>Cm ¯wÿ»êuȪJ´R§ÊÁ8x(—Ìyâl”®³šÆI–1qFŒÐ÷L®pÑi”®»EM§PC˜²ý¢¿F®†$¬×‘Üé¾’"ŽíÀèrR•ýþšœbŸ endstream endobj 199 0 obj << /Length 2189 /Filter /FlateDecode >> stream xÚ½Z[sã¶~÷¯à#5!¸ÑKfÚ4«ÙL'MwÝ—n2;´LÉœJ¤JRqÜ_ßsp¡H‘òZ’ׂ‡ÀÁÁ‡s—i´Žh´¸ùëíÍ·ïU‘&FSÝ®"®9aiiňaIt{}Š¿¯ÊõŒÑ¸žÍ™Œ÷y¹Ìg¿Þþøí;¥#F‰¡Æ­M¡&ÖvUŠsn¨ß &óˆS)9Nž'B-Y4’¤Jº5°9Qn¡Qø«×QÿõÃâ&ú4g”Òø}Ùæu“/Û¢*ÿ±B9k+ÞÇýݺž±4®ö»f Çó|ŽDôÏD£9‡7&œ|Ä› ÓŸ„CŽÝ ðŠGb¡H¿PI=+€ ÏÊ€†g¶`ßÌæ’éxÁý€H?M “&DJÀF¬»«Ã53.3ýYtµ/­ÌaÅ¥ˆÍxBDs&ˆLÌ—€£fŒâf%™I ÂÓäkc„ê,Sö"ŒŽMa.Œ Â(Ðmm²ø·ûºlfóĤqû»A1P¤T+ÿ¥õs3«Ëëý6/Û&MüøP,ÜçeæÞy–ËNãÜ{ôÎó¯;Š:1ÇÁ¥)b„v—çò î­¥FþM[ï—m~?›+©âÇ¢}À‘tÇBR“mý( FÐ}p¿o½hÜ’²ò„2_æM“ÕO~Ê9à¹oòÚÚª£LÞ0ª_Ï(Q·Ê)£ÄÍ”_c©"”wêpa⦰ðr¡ážð‰(l6Žr—;Ê2Ûl#¤eû¶Úfm´'÷yUWÛiÃHÁ)R>áS¬øSR*MT¢Ã ân3á@`C0nN.ÁŸ[}´òÁ›‡þ 0zÈfœÆ¿ÍÀïûEmX½««]^·O'€N  96î‰À»Éà¼è[âQŒ2ú&$Ø8!…‡âÕ›¼‡H ¤JL@¤SoЦÅ·F‰”¾m!½g[ø¹}Èü‚Õ ÎYoÝK­?YëÅOwžcu×f…½¤îAÑÖ“l5Hþ·|U”°â{}ŽϤ~K@ ½]ðsÓèB„ñOU›ƒÁá†ëÊK7rÊdŽaAJ¶ÛåYÝøy•{ÞùéU«#ç¿Üaúþ ®J4;˜Êõà9ï9GkØþªpâ.[þ'[ûYÞ$€\çËj]ÿóÚôcø!+ïÇsÑÂ5óÛ÷¥9ìn¥?òZöp}“LÀèê"kƒ1>ír«Ç7?ÜÞü÷ƒdoD IE “Ñr{óéWÝÃ'ØÂR=Ú‰[H74‘—m¢7ÿt¡¢‘!FqåB†¬"9DHŸýð{¶ÝmòñÆ‚3”¹`çð…— …xŽ81©q,µ^ï AˆDJõó\V{ZŠ+x1„ Tò3XôlN74^ |XL\µŽïHHÌ•ð)Ë:Û}ç½®ä}‚ËÉ%—ñû?ü9øzp€“‰yÈ€ôsòÍâ_ìs‚ãÇ^ç„àÁÑ ¯ûl¤Æ`s,cι¯ÓPò„¨ÔÍŸÀpËe±CËG ¬ˆ¼+BRç ìš?>7ùo¹]“ĉ£¥{~üûgŽ@þñûnlŽ*giŒ 5„«·QAƉæ«àçª û¬^OÏj„u¾’ÎWÑ@Èœ´8Œ²KA±¯‰ÍpZ7ûM‹ ÉP3eÌx_5“«æùgÃì*'} N H5“«Ö,|ÈG òg8$ lBåQÌçKˆH”mÎf‰¶©žoÍð33?»î EÞ¸d%¤3ƒ Þ›“ÍšãL»1 I½Dq©ß€á='ê¿JU›B>¹iG)$?䢿PÊg Ê]ÕƒÙè]…o·¥A`J\Ÿ®ú&ÕO(@’¥ûŒéÜ|*õ;à¦ãû¬vk³zG°}¸ôo.Ê¥ÉÕfÝúPÍù²žP5ß»‘­±q°Íۇʛ|Óeâ¸*”xtpB‚vЮnxa“Pé®–Î6ëÊ7fˆNª™ºh¶ ÖFÙZ˸/%Ü(GlŸðMÄ÷•£ÚŽ {mŽ_‰µ–}.Û=bË#oüt(L€aí§¸Gw_øõ{]üîÆ^Épˆ@·Dô5²wµ¾é©'ÚDíž ±o‘ Û¤¨ñ†P­;#$ìœþhósH:¦›£oÒíµø:y°8ÝŒƒò鯍‚°ÊºþÆbr3i×/´õÀƒ §ï•»¡“ñ’¶x_™ÛzïPÅð"™±U;êÀA©3(óÆgÕ×{t¶áÖ ²;=ª# =D»Ø‹­)¬«zº%£Tn"€7Ñë‚M50Kd¿FS_Û6“{ MÙa þ÷ÄDÓN¢b5 NJR.^Í#ú ¬én!x*HJÓ¡wép÷wÓ°Iˆž²k6÷Íi¢¿2Ý^"@^Ü_a„MõWœÌÈ̺×ùý~c&˜¸Ù(ùXÖ8B&c"çç¬ü§Ò=ûYb0 4u(cø2×ñè:‰Óº „‰®•¹Ê6ͤ2çJü´ ýðcÑ<ÓÝàšZs•ö÷’Bö²öÆ[ÒE®ÐF®É/çD’$F^•8_Ã#ˆ‘ M¾MeÉ!¥eH¹°¹qˆ§ào§Ã×âsújÅäÙÐŒÁø+Vòµ$’0͆>ý„Ügï:‚¢âæÔ‚ ÂÙ×U úŠm®óÁãK5Qúu¦qÅŽü ÉÏÞv$93’höFšÁ *¿¦f¼5µ8™1¸© Z½ŠZ°TCêôwqþ¦c¹5ƒÏ\Ë®áÄP˜¯^Õ/çàó"d 8»¨t(<3¥É¡tVèPc ‹ÎE¶ÝfôÍKÏé‚Ç sºî”•úrÝ©_ðï$xŠ—ÔÇO0šÿ†õ endstream endobj 214 0 obj << /Length 1440 /Filter /FlateDecode >> stream xÚíšÝoâFÀßù+üh¤co¿?T©R{ºDÉKÕ;î)½‡‚šØÔ6Êå¿ïŒ×6l¢žš‡h{wfvvæ·³Ì\~>^0ªCœ¡,On8aÖF3☠ÆwÁMø)MfCFÃl8b*\ÆÉ$~_¼Ð&`”8êü\ÉuD—³ŽÐJW0’Ì "GB«•t1‰)Ò…66œ€ºÌk)çËÛY–.^'S¬­”qE7µÒË.àk(¯‡Ì/¶¸+}Q£³4{®tמo(Ѽ™•ª „ñ×5ó643NŒTõԠЈ0‹‹e–äº$%ÖézBj:]­‰?Ô+šv»†©ÝžyÂMŽJ»`»À±¨cÄQÒù°59Ø4)â»áˆ Þv{LkÂm³ìÆ_à+t™÷×eôøÑN«„!V4Nø‹*êc‰ÐÀÿ)%ƒl¬?øQvBü¾z¥æ FaoØÏâ»å¤^I‘ú6MbßGø¶œ/ŠjÌ´z•øvžq–Ç“bž&¥ªÒƒœJÂø†£õ)º3#jµ-Óè!ïŒ]&êa)tö4ÏcRå~Ä)ÅqìÈr"™«Ì~ 'œˆ ×ÒuÇRïÖ£”¶C߇ýÙ°ÞÊo‹EœÑ5Ïï– Ë–¢½Š>ƒ%qoéô vYG.ÆYu.¶ ª£g;=,%b%ê²{'ˆ¦ˆ¬Ù‡3!Éj¢‹,ÝÅs=£ñÈæŽ„ÃÉVnžîŠ?=•ÜAE³Š¦T\¥Ò–iHVi_FуF°ºA#ô3Øû°¦#|.é­§#tJ:b‹M‹Ž8fZ½J|[ÒqÈi8ª¸( äátXóa›ž%÷¥µÄhsZP2¨S´­@ÉW ”§%;#ÅiÉúñ¨`ÑTPâ"ÞñøÁã5£ÜƒŽì,5£üÕŒ¯-ÙJF¹MBuÒ’ñmpHÝþ5#û©jFûÅc¡È÷¢=Õ+*F½oÅÈÎR1ª}+F#VçªåÉ*F}†ŠÑ¸mPêƒ@yÕ:þ˜vc3sX®¬Âë° Þä½ÐävOÏLæ ©=3™³—Ø´™Éœy™°óBêdp„®@ÈD-%2Ku/!Sƒk¬yéðêG¦l!“S»39 †’« ±™P§_@¦%–‹ýýR³Þ‚*ñ%ÄR³‘ø+rjÚGN¨‡kŽ‹vj¡Ûº‚8ïô!ðÂjñzzêzêšWÐyš÷é²d¡ oãy2óÏ=:±3õm58h%i2ŸD5<Æn1Mœ ë8Î?øÏ ÓüÇyñ2;1ùʽðä–0ÛH‰™ÁçñàŸ† X`4Qp"r-‰€Øž<n¾ÓàÞ]X`Ùà©ù* Qç=_úŸ,4…àqškÿ‹¤ œ‘`QU„|þ=.âmÅ‚CXÀõæš×¬7¥õ ®¤;dÐÏ-·%A1 áÌŽQ!œîr·Võ[q„ŒÚ ·î­|yë ¾\vl5„Ÿ°h/Tv¦ óY´øµÊHœ·v¶ø“VqÕ>Ò Z™wŸhåiv…¹úËf¾÷˜[§øZ¼5.>Ø?Û.Æ*R²Ký„u|#‰{ ?Xë¶á%pz›Ø`½Al\Ÿ.6ö϶‹)#ŽÛSÄUË­vÐc÷ÁJ·ìfÖ•«cèuŒŒÆ M¤9ŠäGˆ¨C”Àw.CÊúÙöÂUDb Z^EjY c¸åT‘C~âû­(²ù-Þ½–EœW¥ÂÔ·%EçÅd³"À›‡$¶ú‚ñ}% )KßUéQÜgqõ"ê°"/Ò¬zý7V‹åÜgÿ ºÌ÷²­%ë÷¨U~þ Kû$ endstream endobj 223 0 obj << /Length 1835 /Filter /FlateDecode >> stream xÚ½ZMsÛ6½ëWðHÍDßHÓÚ$šd@4¸h0üq3xþ¨ 4±šBps0e‰PhÄ‚n¾·áŸËä~4\G Ã]”̢ᗛ÷Ïß*%–Úì]n×h9} ¨ë3 Þvf Q)™ë<³*qIŒ’ÙKŒpÙ{„ùßú>(7?Áí(¥áU4Ĉ¾»à¢ùßw.Ðußõîëýz&\îV•8NÛE8/‰#†-àY|$7p[î”ý›ü*úîcA¸Âr<Ë¿TRoCBņPD*“u$‰âE4Å4”fPhœ…r/:Ýn×ñ×!£án寕g¦2#n9‘g†iB­Éì\o—ëh31.ÂíC”ý3†,…_"üÙ­å»ò}ŸY1'Y{ã‘8Ž‚eDrq€B5>EŒ-À&ç2¼É½¥Ã]ÇCÀÑ6ž¥Ã=¬§„š¶Ò`PŽå#@„Í¢ˆ0’úAã?›Åt>6Û¬µZnâm¼÷žÝMv‹¯Ñ:ûÿ/ÿÚnö[šú—ÇÙcÛNãäÐÑj'³x5½ö#H #ÀV:\¼"áH™=xs3øo. \À¹’”L³Åàö ¾á³÷ø½pdÆ´ç§M©Ý{óàzð1K,Š–XÅTÊJm ç*5F©‡íÍÏéb5êž9ʞ㺾váã÷ Àœ²AF¬±5  Î1t1‘IN)~ÚB–›£è`#ƒq¢©iabŸ%Ž®’0ÝOã#smÑ¢Áx1}0ë—ûéê•Ïëî½J.ßÈr»DzîÓ(®=a=‹Ž'Æ}Û¿¬MaæÙ®Â³ÚÖ¸Ô¡ÅÇ—¶§›h$~+þ1õ¯£ˆºµËZÔÒZ¢­¾!(Çë¯#LToŒhL[£‰½0BZ ‚yF¨fF´wYZc9f.ĉ«‚ÐüW1â]thJXʼnåýÐAáš¾0'èÐÚe=j‰õ¥è %ÖÀ¿Œïû£CkTêÀ tÇ :Nõtv‚­}ÖÃf†P¥:2]laHB›€ÓE]¾0–L£OV B0¨<(Œ+BØVì·“Á¬… ~—|‹~¾K®¯Øç ‹Ý½g'v?7Ê[ÌXXE?®nõ#ê–3…E¥í¬n¥W·ö@Ý–µUŒcségU=ÏÅÖqe‹îRÒ¬l-Áš9ï'¾‹¬˜ ÐÇ×Ñ ¯ŽÀ„Ýu"!UžSY7]‰Jaû^û ºÚE}îöó1SXìk~tö̰½vo’œ‚3b¤èGr:cTê'JÎ3\ײ–j¨ÔT—ìÔÁDh¢:eê.6ò0¨D‘¢.S@ŠSŽõï™D9BØ·ÈlD L—» í¥hàHbnüWª¬¹jhï´·Ô%ò2$àFüŠÏ%ÁxÂ^üþ!ÝVC¬¦óƒMe_L²ÞxÑœ:¾ÊôÔ-4GEæiñ²´»è I<ůyîÖ~ƒÑµÜé®sW‰».;é\ÍÒëõÕÄ!G]¥¯N®íˆê˜H\ù¥8§€HÖkâé‘`­‘¨ƒ)$®5½LXÔxêq±ÒÚe=h.Pî\ŠÜíC ø&¢?´Æ¢'Ã:J÷”^J>…m]ÖƒÆâ@tª‚ºØÈàšëTv0á«jN±§-<]¯2¼â´îõ*o¡W_£N£,‰“ûã'¶› «Ø×Ñ]œEãTìár¿i>´•n¿•w—µŒ+T´’µìø¡mù\òS´Ý­„M6/ŽÊ1¤”(ŽŠçq~`™KÝ&…»ÉŽBýë—o»åz8â„Ó$»ÆÉ6Zo¢Ù6^ú;΃»0ëEÙ­ÂÉ3lk®Ý ÜÁ§{˜Šo.´ö¨©C;Yón¹^àg‘’7?Äõ?=Ø>¸S\.U%Z2¡&/JJwZìºÍ¦É2‰g®8J›e÷²\¹§ûA`cšõðCÀéð:’ûíCöt™D…awòëbOÛéѰ­"Ÿ;l–Õ` ݪã~fÀŸ¨ªÛ{®¥P0“tI¡LäA`yLY·íÏ.6ò0°Üt›I©l@ \­Í¹•Í>·&ÃÚÏa6ýîË·Ç¥-Ö§ª2$#šúOä6Ó?/ËiÂ飪€ªkÍñt±˜"pê ÙÏYšÕ³æbªýÈêà`‘‹w bÜ )(Ñ"WšUX|öÄa?†ÌÜØU‹hšé½/'Ài=²:8XÕ2z¡.`†h{¶àüoq¬·¶8ú;MoM]\êZé—fèpñ7¼Ç-uÞGëÕ1¡î'”¸XžcÎfÜǧ0h”kM.7üõÁ¢- endstream endobj 237 0 obj << /Length 1904 /Filter /FlateDecode >> stream xÚÍZIoÛF¾ûWð(Ödö¥Ц‰’ @6÷RÇ(™– PK)9‰ÿ}ßl”(Ò²(*F‰8ÃáÛæ-ß›1N¦ NÆg\œ={I°L2 “äâ&¡Ò .I¢$A†ðäâ:¹<_̧C‚åpDÄà.›O²áÕÅ›g/¥JFÿ-Óˆ) ì>"Ä®9Ã׋‹³Ï<âÄRGЉDQ Ìh2™]^áäÞ½I0bF'ßÜÊ™] ‚‘ɧ³^b‰ƒŒ¤Ò25°^E*æÆ³þeYæóI¾L‹áHP1˜€üåÉÝÔêîË´\Ü-ýhqã‹ìkæ¾á‚ýT>÷¿ŸÞþC?cÿ†ÿÈoNµšJ‚h$89B§¦YÀ¦«$0‚i÷Oh“”Ó¤>ñq¼Çp„#lÂFOÓ¥WÍ©8‚Û@0¹tfÿôëëù:+WÙ ¼Îów7Ö]JgëOÁÊ+k¹çï­í~ “¸Õq*+w6QÃÊÒ)qçÃvBçcG:_wšfÑ óDÎ'á—hv¬óý™Ýäó|>‡·ùÜød×Ý.MÓ*Ž$?‰ÇI¥¥ÚîÒ;IÝñ¸w¼C¼l—g}ÄñÜÜÕÿë¬aÓH’"©³s%FQ aDÓ~ðœ¥8ž!‚ܘ}8§ˆbÏÛCÈêÌ–!p™HŒrˆ5á]jÔNPàzHÄ0#ãÁ»eV¦6·¯†#*ðàfh¨ôƒm7³cçfC¢6kÀb`ÀÉ„ÒÝP†´ ³ˆ2òùjEl•YÉÀ¡Å$.Âä2›äq0ËÖ·‹ë¨GÔa±£`Z”Yz}CŠ&Nó"ýR=!Dœt;:QˆPÍ*ùÆ¿¿o‡JCÁ‹PXBƒSºm1Ø8¬ØÂ³jãé°uÓùõbæ%¶¼˜ñaÞ?¬¿Y£/ÂliÓ»Y6_û™¯vê»5ŽMµÝ/؆³Ýý†¡5µmåÜZä£i¼üVò°XíÅÌ£ÕhìV‚É **¸ ÙÀ^&0Rz{®|¢¯Ö#Ž!§ÄÕùGé~Ù™¨Á¬•0€RÁÍcF` i%3®G˜6H [¬P†ÒôÒ†¢‹2© ÜO-aÀ¸ªKmJœI±³ÃuÖÀ—MBðT×·ü$]gVŠé¢¼oµ ˆêû׫ ¾BTp¢1!)^ ;@”Ùú®t™¸—1þà9+2WnëÁ^Ö6ÛyEì\^×¥—1:G©K©U`ÂH^3Çot¾pq _.Ó2…l—ãˋ¿€%ërQì0J¿¬ÅÝ:ò鮸 C ì"¯Mq¹Ùd];}p]³Ì³NÝç"Êi³p o¿£&µŠK(¡{a1 EvêÞ6R¢Ê Æ$ÐRHÑ>_|OgË"k2f” "ÍœÐKŒièЃDB0èÅûÁ¨>4¢œ NéÓtœ „±>¶›Ø¤Û±½ÄÃè…aò$Dw“4­JmêW§h$8ä|,Bt¬!í= î»sm N v W?;@HW…¨Ÿ;èsè‘*Ÿ[>¡OãíÒ4-.äI|d1Ì!>Ñ™kCpf’˜ôÊT}hTb`$I¯¬ÝƒD¨{–'쨆oÓ9Db¾ŒXÛö ô€¾Á0µMŒ ¤¥¬0!a¼­Y‘ˆˆ-Ö -S„‰ ;-[Ñòùƒh¹Ž€g-{ å.-Ã#h9¢¿Ðså7eé*ô ëПå½lš³  Êf_ I»Í—áE¶Zïô¸­}ºëÑwúÁÛ,/c‹ëOv]gü0Z£€ˆtñ'kÔHˆu \;‚u#ò©áHÙ'ò{ˆBhŠ$ï—ûЈb(HaZ>M¦ r’:úôwðáôÒ6JÎý8^á\o½znxâqfXPßI zw;6·Bhø%§(èTBMÔ!½;צà~ÕSùda&éÿLJôé|¨³›[Á8Ò'¹p°w»ºI‹Õ>êʵ)7T`-E¿l؃Fƒ@‘Vý*Ãñ$bu r~8&$;ˆSaBÖá,ùy:‘®òâþùb¶ôRÙÎ]oë¹ÿ‘§Ä°ßF2{fç¤Û•laß„[Áv€ˆaxã<õÕñ‘(»M?æ> stream xÚ½Z[›F~ß_ú„%{2÷K¢ä¡iâ&ŠÔ6Ù¾t³Šœ5ö¢¬Á5Þîæß÷Ì0`cðƒü`‡á̹Ÿo怃y€ƒñÕ¯×W/Þ,…ŒÂ$¸žTÄ% ”$È\Oƒ›ðmšÌ‡«Áˆˆð1Jî¢ÁíõÇï¥ F›ü]¦S@Ù½D¨s…ýZÁˆ3‚¨‘Áˆ ¤¥Èg}ÅçóòŸºÈ{o½jq(°RénnÚFÉE²[ÄžM¡Èy@€$À9E‹”G½hÔÚ° …¡T9È"¾ã§¸ê¥EŒqø!_Ï¢u¥Ð~ê”î­Dƒ…„meúZñÈoKäà—-Jba0•,1-ATivë4£è­*KÊr´Á fIL¶kqºŒVÀ.IñJ© >+µl FZ(T! fj?±jSò·\AÂáñ4Ê æR.¢õ}:õf€›„41)võ×´Ä)ø‡Ÿ8sÐèÞ•É-ÿŸ)n¹ÀÓ¥1'¯W*ö€§W¤4êØi¢7âÄ )dfìÎp‹7VmļpKY ÂbÐ3Ã2œØ‹°j°b¹¡´y k>bÂs‰Ì猸Ráõ}d¡•%[š×®·˜ü°ãÅ~åešeñ÷‡(Ÿcœ}ÌšA8ÑàÊŠTlãlÙÄ”…KVº|¾‚ó»ä–wä0¶DŒÑܾÆV=¦Ê –¬('lª“òD,wÆÒµÂ 0Ôf€*Cž \BžïR#;(˜-¥¸ ’ƒ-¢sg"¹íZ2þ`޲õØÚ«¢®M;IÒ^ƒÔâŽ** tßm­³ ™O ~!'1ÞŸhpÚŸ´VE]›2±1½x`p•'ÁööËÖ9g i~)?àqv¶Ì^¾¾ùs'wñœ`òPßÓ kC0q9ž,R–?ø{ užÂÌæ xçM˜X}ß¾êÇ[Û¢nN*¾Ô.Sƒ¸’çšsN^¾þg.¬gv@y¸¸G£7ùÕ=s‘-·VQ]Ë€œ »TЇùÏU2=Mɼg%·ÖP]É«K¹2HȳœÖvêÎ5lÏmsíç×iÚ‹R[k¤¦TòbÊ.£Tf’>Û·T¨Móù‚û  Ywk`N†ùÍsÕ—7û%7—„ÏÃy~®nŸÚ;ÿÞ/_ ãÉ/½ˆöŠ­ÛFi„¥¾m4}¸8Ë8é´•µ–·®2)!¬ÜÅ$`©\7>/BÉnnÁ™†¶ç¸»Ûýˆ­=Ãu™GDè^dÊuÁ¶¥vs#H]üÛyR>.xk®ë‚»SÓ~ŒÍm¯ÓìîAð½Ò¶²xk®ë‚3Œ(ïÇâŒ!Íø©‚39?(yk¶ë’)jh/’S‚´2çHÞdóÃ’·f».9–ˆ1Õ騨 ’ ØòNý”$üÉ£¥@úê¨PÅæzÓQm:*É4z¾t;Å®¹·—bã™ò½s¬— „žÚK‘'´R>ØOP˜²ÇòöRéVÀÿ¬r½Û€cÇ>|áZn÷¶+‰»é!NôN”@ró]˱^ýƒãðÉ y7Iò›È5¦‹õËǵŸa?iÉÏçÁN óÊù| N`;KÏö«¼¯›Á4àícº’´ìÀ6¥YçˆqDPm*¢SYœ+Rx©áú#I4Ÿòþ£Ü »~O×÷žTùåŸïywÆ1Zrñe0Òá§q$Ö N$™?¬ ù4U›ƒA°nfm‚ŽW›bˆ²2@þi"¥¤™Æ@Û!ÃŽBCŒþe?}bÒøÔohÎXºVAl9Ñ]*H°Ûá’uª¦]hlÀC`u™±…Îð³Ý‹²3þF‡c€F=¶]Úë¡®JغØÂÞ2$¼ù˜`t?¬k¿fmØxÓ Öu¡Q²A]Nì”ç“(Pฬ+Q—¿þÒMÐp endstream endobj 259 0 obj << /Length 2534 /Filter /FlateDecode >> stream xÚ½ZI“Û¸¾÷¯à-R¥…`!@ÂSNUf±k¦¦’ŠÝ§x|`Sš5©!)·;¿>ïa¡Šê-NÝ@oÿð šlš¼¿¢þùýÍÕ_Þ)žpJ”â2¹Ù$™"RÈDIF×ÉÍ:ù´øá®8ô¦]®¸¤ ±ü|óË%4 í6w?¼÷‹¦$Ë3†‹Òd•j’3áÖ{·ärQ´K–/̃[µ{Øß6»ÎuŠzíý©<ÙƒÞLÛW¦s+ÙÇå*_üê'fIFtFí<ƈ¢Y²‚‡Pn.wÓÀ£õR’æ"ÍúJê&¦Y<‘ Èþkn©ŒðŒ‡° ØŠ&¥T†I›¶Ùã$ð ð>kÅ‘©w¹û»ª¼[®R*Mm\£,jl¤‹µYK?ˆš;ø‡ZÇ­©M[ôMÛ¹þ¦i]£¿«üP°Y®²Œ.~ö_–MÝU]ï'¡¡ìgÖÔ£ŒŽüÔ}wm™§1×u±7;멳~ºèšUYìvfíºŽ»]Õ…3Ç„OÌGS—ÆõNFa2Ò9ÊB Ýnº9¥³œ°,LãØ«×¡ážM»6mà ìýðÆ·fR¯•‹m…ü¥ª·~õºê«¦.vΤ\0"•Ž•Óõí±ì­ñ±Ý 1>+žBÆ_$qÄ•?Ëm9€Ó2V>Ójª|œsR>N@åoÉ»eNä#qÚÃYèIø•‡ýAy8è”g‡7ne´àŒû m3ψ’úd'Jç 'i¦Â¤ ‰ƒ‘WеVÒ*i•TD"H¦‡ï¿›£€±>hôë º¤$‡EÇàBgi¡ËëÉ¥9ö\r+ûfÉoðß,y–A¶SúòQqëo%î3ì»»H!àó]{øàïÙ|‚;Ú÷L-²ø-#Æù)ôb&9(…§O)%6J5—$8Mz;kJò“ Šj’¤r–ÚÄœd,}’®6€æíKÈÅÆD¨|L­°È–Šd‡…ÐKõqk0á+4¹b3ØÚu,(عEÛõ6Œ‡ÉU]¶¦èÚ¦©‡Ogw ,$O@1o‘xóv]#ËÌG¹SCÎÆÜóB®žWíÈDß…]‡ØQ±#s2K“Ïs1,{†e¯–ð‰øÉbP‰³Ä® ,ÚÇÅô4Qz²;‹õ©ˆb'Ôˆ·Ø]³ŸWeÏDÆìQ?c"ËpÉ×4ÈQot&2BÓ z D/0½ßH¬ÝKÏJ!™:ªø1!F©wì2Š0=Ø”Í zf¬·³6%ýV‰>fE(’óIlϰ1ÃDv‘ v1þå£(!=yß\âQx }Uà€ü§Y‚è|`êόɟ4æ¬×ÊKJü&F:Šo¡~9+žåD§*Ú#§ÏÀÒeçÈ$ÞL½Ô$Ó½SšGéýEÉ{âþ°ã:>û΢†³){J~9»]nNnÿ¿º¼äÞêÙþg#÷†ƒ ¢¸~b¿‘ÊìÛ`RötPüOö$Ó“&SŠ>IO7wöàžÔj8Pgþ@ùõxL¹šAv^ÈFŪ,œ¾ñ­éü‡µ{5:ˆ»ÏFgnèºB•ºxæRœ¦/Nv»Ù¿wÛv|÷p0Ý›à9 66læX¾jNb׳e&î'6ëuô^ƤÂÑ­ pëر§‘eJÃFÐÚ¬eyl½ˆöì1È;ðHÖÁÑv¶xY”ýÎ×sûûª ºñ&«¿@ž»™ïï-‹*ð×;;×¶üÐ8Za ýÅÖ‘wGʇì,9,KD O˜³)ø-œ/ Ž ‹=ãz)ù´b°=@Ww ¥ˆ°é‘¦ÉÍÇ-®–’{;pI¸NšìEüDT?Zzß?üXôEDô©«³Ény‚^¸;#óæÂA݃©€> stream xÚÅYÛn7}×Wð±}¡87^#@.p[ ‚$m<ä"A«° ýûžY­SÉZÙ”¼haâr¹ÃáÌ™’,¤@Vƒj jÅC $(ãEÉxÖÀŒv(•-˜~sÈÏ%…Jº Â¡ZÁ³„–ïKh>kÅXRÞLÆþT€Röÿ\vŒ?$CEwõ™/¨½Zý߇W o,þ„FöO¶À‰ðÍV]V, I`QBz­Þc³€)p)²ÀˆÀ•2z ,srÃ9yÃ¥Àú¸5¼F¯$—¢‚!­»Ö P“Ak™¾í˜$“³)†y(©.zÕ'd² ƒjZ ÊØ†H QÑŒ¤‚ž‚†ff4|%ä;&¾l€Zó‘j 0°VhØ3ÍäX ÊØU†Êµ¸f 6t‚WŒ7© fLÓ° Œá–ðÄ\Ñl zæ¦`ƒÒ ¿IñF fC^eì: †—šÞQ1’!¬UØ+° +bÅ«–!)Œ#'è“10'X —Tad$ z¨:¸†,ŠíƒfõcÎìÇðsbK!i„Ì€¡ûÜ O6 %a2†Y—䆃ׅ|ë±´u/Ø,õZÅã(ËÆÀ2|b—êÛÛðë‹ý*ƒJñ:ö1À6ß8EM\gg‹å‹pAæ>÷*,ýí÷Pr4ŸTJL˜îòËçÏoOžÜ‡5ËèÂb# ¸ ³„eta‹E†v°çëË›pv–ç™6otî40NpN°%‚ Œo 1¶a°ðšMŸG@“„]G¤ߨsÐíÇ>{û¾›7@¸åË«õ‡×«›p–/_œ‡å›Õ×›ðMî7ÿµÂ‹w¬ËçXÃêòæÛ_,_­®×_®>¬®Fº~Y}üôîÙúk¸ð¥X³Èpàªk{‹¯½»Â¡<½¼\c‹9]"gNÿ½#À€[,_y3<ÿüéòÏÅòÙúêãêjøPz»üqùÓòù .Ú¬ ÎFš-E,ç „—@·ötØ”×aùÃúÍ:`K¿»þòþc?­/#ã¾w-Í# N¡'°lt'ÃôÅ©²P—,¼-‹[_®[Ögo)kÙ7ÔèÆPÅ$Vk}XI\yÀ¦ LK©NYµy¬¢ KÞ¶ðÖ¼í-½V½í%§Zx¥= /í w3»câe³tñ›ß:«©;õÁ­ÕHÚj‚µyÐh±qí±/™ßÖ¥RTXÇ­µK“ˆpÜ#Î(ͨÊ3,ãV7äÖM=ÂØ]׫©Ûõv Ä´),åèñ·k õÖ>¬¶¾z ’ð[Z–+G8ÃñTq«ïÐÃ}Žˆ`vÂæ%ýK6§REÛ†­<’*FEи•4U¨;%RÓÌpOXC‚›¦.]¡(Ï蜢°C†z$Ê&׌‚ÍŠÄ–Ff%®ªÑ ,x<¥I*±µ¡Ô‰•;¸‚vS÷’Ö¦[íçŠ)ì!®˜À¢î‰Ú)ƒ ”lÔ…¬ëêDïïÁÒn܇eç6ù¯Hh'÷ÞÊãO¤&½K)^¨>’R6¼Èã²½ì~GQ½èž3©›Í*È>¼„QBÆ©{¼ˆçóiAŠMHÿQ?Ç„äVÄ¢Ÿd²Xk0³ÌF3~„ºUT“[4:¿j¤A5ªßT£ ßj¥G›SÔgžB@5"`Ž~^„z©ªõÈ’ïP¯Ÿ;uRï.tC#Ùs™^¬µIêÂ~“pÖ4úQOA6$}X…¼G%SXÉy2MbòrßÚPi‚ZVr,YN)AwòÅÝRó Ý?:/d–=g:…Ä·ôÂÜmÎ;Ðû3‰IìLb k Û˜© ‹ŒaŸ¼ÜRl©õa3h´Ðÿñ>«;Õ„¤ì™Øãò?Žâ½Ìïy²ßK0’¿æÅeŽÚ6^«©6?öØIž‡¢ZìÒ1 Ef?ñ::ª¹ÍIîv½èʈ:±~bS¹ k.2ÅøSXD¨l}ó –Ægƒ“X£Ø:çå$ѸO^*-–j'¸ô¡Ä#ö#ÎÌodudκwJà—+te]YÆ_Ó¥¡}¿·,ì¾å$¬² \W¥ž²|FV¶˜¶¤Q÷ðc¤¡Y,¬Äœo‹ŽS¨¿¸¹s`ñb ¬nvÑýr7#Xï]9À2ý:Å.X®9¶f}Ø ±O9÷»7?ë» 8òêìT¶}¶£|˜7·[Û><^ úuêœå7!‚¶HjTñ»bB™dÉ‹‰‡LTæ½ø’R¢Pý&&D{§”~iô®ÃX¿ÃXÿ™ÚöÐò– EÎ}Pl‰i *ÌÇ^?w]8߉Р¾­søÃyȧï÷Ãðü2g endstream endobj 272 0 obj << /Length 1586 /Filter /FlateDecode >> stream xÚÍYMsÛ6½ëWðHÍXŸD:“CšØÓL§‰§×%¦ÎH”CQmÝ_ßP¤(É¢¨º=ؤ `ñX¼÷HÑhÑèfôövôꨊ41šBt;‹˜2D(ˆ´b@D·Ñ]üý*ŸÆÅx2Þ¤ù—t|ûáÕµÒPb¨©Æò„p‘Ý ¶Ïˆú¹Þߎ¾oid£Íe¤ÃÉXôe9º»§Ñ~÷!¢„›$úÓõ\ÚÞDÊh}ýZ!V42Ä(¦ì¤û'‘)B…©¦¾O$“q–ϲ<+Ÿ®ìGÓ«ªü•]µ»UŸîêZ ‘΀ÛÍ—KR}‘ŒAjD+ãvj¢NžÏ­7°NnÊ`(yÞòCbÔ0$‘ŠÁˆIÌg‡@ÒƒàJ‹ #ŒJ¼on4óÙ1»Ó!˜’„!·ÓœaÕÉ"Èÿó¨ùñãÍ(º›¥4þaýÛØ°xºÈ®ÇXÓb Iœ>}zZ~^-ZGôx@d Á›ÇF†ŸÀ#%7ÍNÕmàã€L-“Ô ~§’úÁÚƒ5š„ѳõþ)pA´0ÔäÔàµX£mò/e¶ÊÈzvym ǭS˜¯Æ#çIæök¶O˜¤qT} ­›uúà[òK#‰MØCÂE©wçíÓ»i9ÝG³öˆ(hf²SRŠöþÙW®zÚɆ%sHËUuýÃU îÔ´L}¥Okµ)7%é2I(VʈÒGÏM¤†ÊoRÓ†p®0D«*Ó÷M—‹´;3g˜”2çLÝaiPÿ9„=„ DÉ逄FÔ²GˆFÁaní Ć7‡ÅL↵Ûèùôñ/i;®EI͆Šå¬°my%CÜ •ÙÚ÷w»ä¼½^¥^ÑÞëÑ]RÅÉeìŽTÅÃŒ²Ø¤‡•½÷¤]Øjаz#À o5èhžÂÓ› ´>KØáÖ>n…]òñVØûÈú/NÆWiQfi æYumé|Õ´v'b½+s-·aõ75ž '!ºIó´ÀSøwºc4Òoõà Z-«¦•ºz(‡ ‡À{§ùœá†tS¦§eYdŸÇ ½A™žæ:$‡Êu$Uœi¹)r¿áåW¯ÎóíÚ‡»©½„hìC7q$7¥k§5™ï<àÙÛzuB¹Õ(öMêêî°[XqœË˸ÁMNt gLÝ¡$O„ ôJ"€À3ì¹kH û"yè—ñ ÂCÆÏõ ®B¿Ðᆠº†þ«Ò]ØD||¹„mà‰!‰JþÕ·$ýáv3Ö(•L ªè!1j€ 1ètáÒF$µ‹¼IàŸ‚N-ð},ÇO›%šrUü<»¹þô~‘.Ó¼|aUßb°ªÞÀqXÒQ(k›­gÐq¶w6έ<'í€gN}—Àö¿K@ï'à K§êV6óõë}‹^D­ÎY^:§…íMü×.¤Üõ ¼Bkçaùªv§à:(86d“ò«oJ‹åNÁlTï7tW÷±ÏQ³aX=ç5ðÁö­Îëñ„KÜð€¼ÎÖ¥‡ŽkO2TZ­ —xˆ1Tk±P ïLЦ‘šX¶s¯rÜMS³˜º¬½ÎÓ=C;#§‹…ï1|›·¶éÅ^ ·Yo¦~àv—¤Œ{'¦òûe¬“U?‰> stream xÚ½VKoÓ@¾çW¬z²%<ììÓ+$@S !!hn¡—lRK‰Sœ(¿žñ®m%M ¤®8Ä»™ÝùæµóàlÁ8»½™Œ^Ž‘fÁYŽl2gÂ8P™5›ÌØ4y»®)ò¤N3Ôɯ¾úôjòþåØX†w‘Wæ -!&ÔÍoeOFßFH[ÎtÐR3+ •³¯«Ñôг½g¤ËÙpsÅÐYжá[²Ëѧ¨²áÌ3©֔dƒÐ 4Fáç?‹Õí2h¹/Y 4î)¢÷Ô·A} ä¼#œ p¹;ИƒV8¡SÉ®#ЧõŸ•€Ñªaœ<‘ÃO“qõ‚í>_<hGˆ9‰ä‚dšçEqû:>³ÀסÀ]²i¦…N>”›í®ùôUŠÉ‹4Ð˸d¯ãúÎWëUYÛuýq~1¾<_ú]öU`¾ð•¯‹eùËÏÆEíï/ý·ÍÙ|C_|Q6ßæ÷ªÕïo?š(]ŒNvðaˆr èNøc ­6o3mýÅ[7bXU»ê~åq¹:ÌÈÞÄ“<´ÑjJêAÉ0¢WB€ :4 , €h+kƒÀ#(EB(í÷+«h­M¼;0Õb¸%P^4ßÏ]¶!ç<ùP\ûåæã|œRô‹:Å<¡t¹_]¯—{íá8u)%w[ g™ (£VÛJ·{)n»~ÔkRPKêN‹&e[nò×.7RQºcŸo— l©É÷¾3î4UzTÚÈ[¼Ønëò:<¹ÛúŽ­÷ÆÃΚI'Aӛ˄NA 8Ÿýö®®6i&ÉÑÛ7K*pq·ž·”`ù>­¿>N± Œo–ûHÚÇ@š)ÓÉM¹y|S´¤³õlvF.Q&g¾ ñ÷ÇWgñ¼¨fqs[”µo÷eµ Ò¾naŠà[–¡GD†d¬rÑHª¸ué7pX8ÚשM(Ìó ÚXÂýãñÑåBEFçCÊňN ÝËA•sF§.òÿ3Gh¥Àtî戾œÔÍ\°SMâð,mÿt‡úT8àV>Gß×R€Ñn¯ïwý]´}_t}ÿ¯ýþtÅmCÐ{¶0z5•7(…ŸÑ•A*šî8ÂÃŽß÷Þvý ! u endstream endobj 293 0 obj << /Length 2121 /Filter /FlateDecode >> stream xÚ½ZKoã8¾çWèh MIQÄsØÆ$‹Ý,0ÛÉi3}PÅÚ–¼¶<éþ÷[¢$ÇÝšsøP±ÈúøÕƒî¦É*¡ÉÝuí߯·)$@Iš‚L_•Ée’JF8èäñ%yš}Z绦ØÏo@Ò™˜yüç%4ñûU?ß9¥‚¨L1£”&7B“Œq«ïvr–ïç,›ß­ÖÃ÷ís½9ØÁ«ù^»ý–uµÚ‹jY8Éãóª]Zw{g îªF‰¦Úï*9vÏǵY¯Äl—/¿æ«Â¬\Ü2Ú[!3’ª Z³qç9£3<“3{„vU›ˆH¹_´Û×s”þ£|)vÃ×cµlʺræ¶-ÚuhöÇec‡·fU¾/Lc0Q<ÂÄhiñÀÎï”BU6Κ²zi—|³Ã 1'Mn0ÂÃ'Rè ÎòͪޗÍzk‡ÇCñb{eeÛÆKzÐܲMmnèíà¤jÛÆ1Û Ã)k˜í[»ŒxIDF¶ÇéŒÔ*ÙšHû¶Õ¯îŠd|EŒ!ù¤¿¢‡ùM6»W©ˆVÔ‹¥Hˆl¸²²`ÅÆ‘:ADÆ“Hêw*©ª/<0ã¿§T)‚7í%P ;É0¢¥öB¯Þ1ÞÖårm»eãZç@»úp(Ÿ7ÎcÚû1ž´.–_ýÚïÖ)Êm³*Í¥þa€.*;µÍ›}ùÍöŸ‹ ú᯲Yû-Ã¥´#ƪnAXœ "¨^oØzSï¶Ee ‚Ô\g+Wv3§ÛcàôKái[VN¥-Œ¹‡ß÷ÀsϨ·ãÈœ¼Á#fâdÇLënxS\Y#¥µ]é4!5K'2ý)B¦— $üˆ ÓóBo&FæHÎ05ù¾1aÄ ž¿›VÎ>çs íì¿ `ÇÍ×|_¹nLû4H-RŠ~r1˜^pS§D³^À_ì–yåΰÉÛÌÕnÓØ6:°œ•[±[öõN.fÿFÊßÜ1´Ãû¼Z]Û«Š0ªÇçOk#þ¼´ä¿/·ÎÁÌaLç‚HÜüVØjgçµ 7.ìÚ XÜßÏ5̵|qýç•å#eÄQ&ØÚ$Ë%aÌ¥YAØOÔÉÓ £”b†ÝîŽMn²£‹¯>®¸Øõn©p¢Rpq,òÐÏ—âÛ¸rꤔÞ&è):Ø4ɪޙìiãí~T;1Áe ÖgÚOîž.(m×»ä-Æ<»3–.³M ˜ì9{ŠŽŒ­º;©Y¶iîT@è⇔€Ö‘ÍLφíǦðËÞ-Õn¸6!S¢©ŠPù:‘ÙÛm=Ú6]Œ6#×ècwõ­kweƒÞ]ÛÖæ,ãν3:õM½/\h¨«¢¿KËJÓä•v¡/ÖÌ`YïQË®®^J £Ôàã…-Á±+¾^­‹âJgty l™ñÁí*ÿàÑ”òu0ôR)]}É1Jì̲çœ8ñVn6®g"h½ÿjW¸¥•p8µJø¬êö±€pÖf­8YF%sæm±}.ö‡ué ‹¦8 j›[Z—+79=­ƒ\ýúxõ¿+“£hÂü£†sJ8³Ü^=}¡É ~ç²ä­•Ü&L+"•Y·I®þã^H4ÑD§HAiÂ1ÏâëˆHíÂÞ¯ßòínSŒwæ¦OõŸÙºw|e޾”ŸÓA :Ó# ’eH;öþ #£ÈÎk°±ôýS|@‡?åqøQ²CëúÙ'>߸k3_ Ó<*Y˜f|2@ª",Ф˜vKoˆ`†Nµ<‡àdóÇb±"@]AÅõ%+tf½  8ðÎÊÀ!dA-2”öºkP<Ý%€îIwÜfÏA9‡1”R—‹@)5¡Ò“Quøð`˜6P$DÌ)/ÀA§ÀI£ûè4t¬„–è^Iêg[ ßp²õcÖ,ìB\4/I금D\óÙ£[ðÏŽS~ À@q :¬BíB«wjƒíì—3èM6}ŒV~2…‹¤óöôåôS?º3å–Ï(àÂ;¿ \ôAÐcÊ雽Õ† Ɇú!ìȼZn¯»»÷AžŒÐd¦Ûߎ.BQà„i÷þäØ˜úüÊFxtÜó‹øÝ…¼^R™á~à­×Ø.‡7ÊcöÃ9Œ'4ƘâûY^(Ž¢pWd¦ƒˆ˜¬G¼•=GîZÝ…Q`CZ`ÁYPœE°õ¯ º4ɇP6ÚNÆh3Ó’¤:½ÌLk™£r/Ð|-ÄÒ~1ÿ(4N?çØÔŒ%Ø_ó¬a™".ø®?gîòí6§æЋ¾j¦5Æ‹@•¥—HCLIÂÿ¹W½o`’ι¦ˆ=->uDxàÈè#ºg\s:c ±úË8»Œk¦œ–ù6ùÉzdú ÆF`–©ËA2Òþ0~¢ñ©Oœ î]+u núN¦dVüV“ c…—ö¡Ÿ>¢#ŸÀ>òSØT¸ŸÅÏ>j…T†ßôúÿñ¢÷S-h Õ%ˆö?+²´÷«9^êÿƒs¨ endstream endobj 301 0 obj << /Length 2628 /Filter /FlateDecode >> stream xÚå[[sÛ¸~÷¯àäIžHî—l³3Í6ñîN;;MüTÇ“¡,ÊV×–¼’œÄýõ=HŠH"EZq»‰( >|çà;‡0Ž®#¼=?yõž`)d&Ñù4¢Ò .I¤$A†ðè|] ~Z̯O ,OGD ’ùUrzyþë«÷RE#ƒ–iÄôì"ʶ9ÁéXИF„#Æá8#ˆ˜@Z ÿGÔ?…p”ý[^GůÎN¢‹Áƒ]w÷ëx=[ÌOG \Lýçu2O–ñz±\•ïÇðÍàÆt>['þæl>I¾ùËÕÃøzyJô`ñpïïLý×»´é:íðý)ƒØý–[‡«ÐŠwÝûškÚYû(Œ˜²P&·o·hŸÒÇ Õ@øãtãâ ÞRô7ÝSJÒx|Tc껌)ó²ñ6ÝÄÜj4©8ÆÓμ©â{î3¯l5ÅΞTï@R”äʳÀ*VÔ+ïMBz\Ÿì̦ɚ4R¼¼ÁšÈ’hëÍIª¹*–®òÑ@f ÓˆJ5³w1©¹òýÓÄ$ºOóó&‹Ñ‡hcá¯; ÿ§[ˆmºÿ»°b«ì?$¸üÏáWÛX8m<{úÝ÷êJÊc_Œ4Jy3ˆjéRMè֔ǾI“ŸiZA^&I= Z… ¡1iº×€]î¨Xº#ü̃8"ŠF…fkÀÕáJ¤eH*ÞO”̃R<0!VY…öT¬‚ 3$Rá!÷€Ì­iu¸ Ȥ¯TSöŸjV|$ B+W±cÄ4®Ž‹F…'Õ+L„ϼ„óÔ~‘m?ù8kãe쪞!ÊJºÕÜëÒƒ0Q´½šã>óõ¾´$ïkùÂñ·õ{7þïEÜV³ïNÜjÍ^PÄŒqÙ‹ÎN{\Ü.Ü´‹«[/îøÿ&*õ”VôêÛOÍȚķ ”ÕåÄä»V-!XE¶šeƒ‡½ZoÓÖÔžã2Bø3{ s$(ô)0ŒçgöiqjïNj¼}|÷Å ‘ù/VlÛK÷=.Ÿ—ÛÝeMÅa[iqyGzÒÄÏ—™Ú»þ\zṉç?ÈÀ™ó%¾ý„ŸÃUÊt¾Š×S{ÚF•¿­)ÆÒ4§;ôJ£\!º9-gÇž>̯ìÉÆì‰G ƒè U›´4ð!Y?,ç«°ÌKOÒ,—Éê~1ŸÌæ×i»E¥ýžÃ1þNöCåY|èvöŸì¤Nåô¡½µJþ('­Í v~µ:xÆLƒ/ðÍÙ" Õ»ó“?Nì áÈe®Šˆƒ$¦ÑÕÝÉÅ%Ž&ðÛ¯À#€}u-ï"bÊ>w}<ù§?+±õZI¥['yhn£Úâ±óÝ·øîþ6©Ì(A²Ä†.™¯œùqØzwômÊ­M­Æ Nºt‘þÏ…Ù݃Û­èÐGj3 ÌZt±‰ögpÀýå*\ÝábOZ »ñSÞ Ñç F¶waƶÿø÷ÏÔþô/ûÓußËAi=£:(Òf³Ç¢›‚ÝTJ·éêõ›÷b?>ºöd·Åèçþ(ÖŠ:šB‚ é‡b#JEVrÌæÓÙ|¶~zºà¡¿M^ÑìjXnè¿]î`Pkƒësæ’ÖËœ¹FTšÒœ³)½H@üHg^ø-öϲµ‰õY2êÎlÇO˜D,KEÛ;ʵõ”3§PÀQœHñ~“ §ÀVýùMkhêè‚°UŠöÂ!jÿ|Ã<µß´6¸>g 2‹¨#1ŠPâäPFò`Ô¼˜FØöÇ¥Ö Ôp¥ö»ì‡K#ÎË\J?2æŒ, K-DÖ‚flräÛAªö–×'ÂÄ`ÕIÄvé#7ƒ¸£ }‡.Ò¤Èö ÈN1Î9EÔýyG‘ ¥º@Ö™ öuM^ ~›LžI=à·‰­L” ´sѪÀö•I-ä³+„‰>q@+àë© @Œ@–#½TˆqÏÚ° pÀе AŒ)‚F‡.2#4î<}>rÌÅqDQ¶|JÏÇ>/>%ƒM²2›’½}ü[¼Ž­S_äª ³ËËáÅ h ®öbøÂþé”C/Ò¡=tuô…+‡|aT²ƒÆw蟹ÚK…2Zõ¦ÎZãSG˜ûÂIâŒpii"ôËúöæÕgÈ\ã8b))»ªzÐ%§åwž]CÒsÚ¢RÇ•Úzï…9t !!Y?")uFaQŸ%Џ©¦oov}æØWE:mKúÈ͈v’ô‡÷ èöPô¹¶N?ÿ @F endstream endobj 310 0 obj << /Length 1972 /Filter /FlateDecode >> stream xÚÕZ]sÛ6}ׯàd_¤ ÅÅ7Ò¦Ù­Õvº“nì¾Ôõd™Òj"‹*%{ãýõ{¢(JŠ)2êìƒ ~—ç^¢Ñ,¢Ñ¸÷ö¦÷ÍPib5…èf1e‰PiÄ‚ˆnî£ÛþßÓål´Ÿ F ûÉr’ în~þæJé(±Ô†¶Ü®Ñ²oÆÕéÑü[X™E€F¥d®òHp ̪hÄ%1J†F‚0ÂC;B£â/›E»·ïǽèv”Òþ?ãM6ÿüöù*€é'ɯÎÍxž½›þ´Ü$™»{òëŠ7§­#(‚ïöŒF#†wÀƒ—$ô¸Ý­.‹îïx6çYéÕzó•4·"¡bEjbðë¹™Ùt=Œ$èþ§¢\üºTˆ=+š¡yØQ9º`$a¥Î‰éãr²™§Ë¢Åî€UFwÄ-'Ü Ó„ZL¼O6Ùr=qÆú›'î‚÷|çÃÃIšeÉz•.ïçÈ¢P/ Õòú¬¿BpÂU: å4Kr[sÙ€I?ˆþå§PÄËûP!ñæË=?fÉ2ÉâÅü¿É}xs5@ÇYâŠg×ÝhŠXdí8‘†^­“?wX¾7B‚]bˆt(ÀТ¨ä Óûá¦÷gð\€Ée¤„E^A4yèÝÞÑèßýŒ4äˆï|͇¬&R»v‹èº÷¯µŠFØP1åO[¹òÆ Ú>Ç«ERÿ2g@@Ùs>]q_{÷±dì” 1b­Y‘ÐÆDáD#ü'-„ÔsÜ‹6 7#XeÚ‘Ø»JrÞŒµE‹ýeï6§ë,^}Ÿ'M×®’Øv„Ä)1”¦ë.Â^¿¹ŠÐÏ’çëç‡éâíó?âMìÒÂí|9/ç›ç! Ã-ÖÝ<ß oÝ6„;—4¾ýv/_ëK‘X*dÜâß¼:þ~Fê á‚!ÎŶ€1bZf©«ØEž}|zõ:º1J5 ¥5˜ç.Etʈ0æ\ Ëi8q@˜…‹¡@Bss(7‡¨Ž²Á‰I4¨£J,%ÏÅËíÀ“|Ê¢ÃÂåݰRƒ5 í EmbÙv¾±çõÎkA¬…V)½­ŒPÊÛLo-Lä'`bN[¨I•{¡¢· cP½°Rm‹j{ìÕ&ÍÖP^‘ÙÏVØ¥7Na£Gñv;®®q±ÁìV—Úmÿ;¸2)ÅÛ-Í$ÎXR} -Í$®XB±N6á cWzi=IòZ“t¹Þd“¸¾YÑücê4î“û——ŸÂLw#?…¡DñªÏ3¾\ O¡ a8t-³…‰Â ¥3¢Uªjc£pC ™½Ì¤,p‘jAµPŸIê´§Ÿ”OjÏâEç+7?%ËWÃWéýý«ÅgsìêðcæZ\~!ñѹèïdq‡þ^Ú\ÄëMg2¨9*u`9%l2HàRyHåq³Õ:U)ù-­*¡áqSrÏ”Ø7UQU;ÅQqÕ:¤hJ(~!®â®À¼k®N×Ý1µ1&uX)ΩÔtÂTÔ Ôžb*ät:LÔ‚|ð¢²ÓD•ÅkVeè®-Q[M^JÈ"¼xSÒ7†¶6:Ü "å…HV ˆ¯EúiÚï›ÃRGÖ0‚ëÝ.xÏqåæï‘¥Ð?ÈØÃYZ$ìñ,]Zo›¨›ÃRGV£ —â,.—³_´Ûm¬NhÛ™:¸Òeº¡­b~ÁøåtÍZ§ëÃ)VœÜ­y]ÃQGÔíäsÖj%ÔÆÆÖ N´mV…-Lä kgAž¶ðòMœÁËMy֦ͻéØïפ«¿t«Æù>ߤ¡@„_÷‡Æ‡Ï;‰*ÏšmÑX\~ÀÅ·hf;½u÷Ó4 þ\Ò]üA)ÃUm~7_ÞûÉÏysN¸òÎÉÊq»D"°-L׃‘éÿrèЈ¢î€Ó#æë²PMWÏ5‰08Ðe­r€ªFòíõï‡L)¢ΞöåRJ7;TLX¢åK·¨š¹–‹˜Ðg‡6¹¨…‰Â .‰ íÎGÛØ(Ü`˜Åä…Ž˜‹Z~ö±Ñøõ›_³ùr2_¹óÑ…ûLæÏä®?ΊäÅ:“3Í¡©£‹¯¦«ä I¨É£ä»UŽÃ"Hˆ‰ƒ1 ¿ðÖ9&áÎeAW.’§dQQ=î箼þ僃Žþîðûþ¸$iÞ¥*`­7uÎQN€Í¹ÉŒø:€Æ¬9u( æ:Ó ÁÀb‚ÕÕóÈížo ÌV«º¶¨öE=ÛÜÝzµÐIqb`*=fý­œ¢«_î[cÇê}Sœ(­. 4aе_Z¾ÃÀ(Åc‡áÑ: ˆfÝEJÂi.ÂþöJfìlÿ·µÿýœcŠ×‘™r^ ÷«xò)žå7ÓÔý´g°aÀ/<&„œ`YãÕAᨷ”ì\PqÉþ¯×ØÍá¨#ŠºÆ\h>hYŸ¶?¾~Sð‰XJ§qüðSÀ²»n KX=FvCU°¸\Ï©úÝd/FZr¹ º¸ô}(! ìk*Ÿš÷¨ *š )Õ¸þÔ]Ï?vG±¦X»+yù? Fc« endstream endobj 320 0 obj << /Length 1628 /Filter /FlateDecode >> stream xÚÅXKsÛ6¾ëWp¦ªµ`¼ ´Méħ™‰[»—¸žŒlQ '¥’’cõ×wñ EŠ’JŒ{‹ÅâÃb÷p0 ppÞ{sÝ;=#XÒ&Áõ8 R#.II‚4áÁõ(¸ ›§“>ÁaÖ®âô>îß^¿;=“Q@0ÒX»±L!f;ˆh#ÓÃ~®·×½zª80ÚQÄDQ “Ñà~Ö»¹ÅÁúÞ1­‚¯Vrf¤Á!‚ipÕûÃY,q ‘–TšI5È+ÐH%Â\»©¸C±Àá_y–åáòsl*Â.&sk°ß‹áý—áÄŒç}b–iêçqgÃå<Ë?ŒÏ³ùjášBvaµ ¢àä€5ADŽ:…p„µßÄg~½ 'â>oOj½Ø½NvKÈÔ·jªxÑ-ŠnZѵ5a)̶…ë3 ¯zÀ꺊bÿî´†¶±;Rƒ*Ñfƒ1‚fûJÙ$¨7üyþÄþaŠóN=.^»eÇZ¬Âj( n,?¿ºH—q–Ç÷àÕËdž~o¼ÿju71^ÿ 'å2KÒûd1œB?Èn‰ ä¤9ü|ò³Ù!f„ÌïoésKߊíjus»”DBwr˜$”D1·¿&Xƒªó»ùØyåýV|É œëbYœ¯¦KžD8â©«JW$©¼zÿÉ`?\_ïwîöKm¢q$ù 9·Œ¢TêÜgÃ,^_­gwó)8 è¢;ÇkCJI‘TÝ8ž”ˆF¬Å“tœ¤Érí#a¨OYY+2Ý´yi^¶°RJ”mE LÀÚYž ¬íWÛL`(I'€ ŽQ5ÀÈI=wð“zª¡[eÑν¼ØN…û±h½&@¤¢H¾Ð9ä1É=‡–îâˆRǧ±5M@*Ús1Œ8Vÿ7Ñl¿¢&(À•”€VqÈÔÏMz4Ñ$d';,É£Ü&¢¥Ô~0[#Ѩš&ÇyÁ) {KÄ!“ï@“èbuà>j'–¤dââ[ÐŒJ¸ðN87ê¢odz5 <x–²<…æ`ÖNï,W/w‚$wA¹At?íÍo"郆—&8¾œ.ÔäÛ |¿«€‘Â!zZ‡ôE±€zÕ hGš™›8øA¡ŒCäÖþ6½[¹ ×3S‘ãÀ‰pø‚:k ‘~‘õ‰ ç‹8[&qîÚFq–˜÷‘ó\ãØ ÎÜ×Yüfh›âµkÊ-yÍk¯$Ît»1Öt€(¢lc5"-ì¾HGñãEzyõž~|³®Ùà©suò§užžΪÏ=Æ6ø"ž: ÷$dî«!W-Þ„6ö@Þ ­MoXƒ×!HM‡ ”ªP2ÎwÏD€%‹BȰòªò¼Å pR‘ÂãUjoqňê^Ôž·L3p= ËŽÖž¼Ý$š†—Ù|1Ïw4 ¢®’ø†›ßûæõlúe˜¥‰ 4sà™ëµ´ÁTÎŒ b ¯ÛyŠ«M–Ÿ]m`fÓµ%æ{biÄ4ù×xà>Mñ?åó]0 iAÉà¼z»I L-í—"4f >â¢B|؉­‘ð1õM›‘·¾Å.Êu¬n@âöFÔvPGp@Y±9—Wý ßïØEˆ/4¢`7’̧IêÄ¢šãpÄ*R«ÏÌáˆÑbÞ»TI$ Ùé\5! <Õ %¹[ë$1ÇîÁ¬>Nwk×UÂ^0[M‡®uäÚ^¹/ö£ô“ûŽ™Çö+„$?&µ¡¢0‚Pq~TŠ?FGap¤Hé—¹jr ,¿gn²°ßfòçÝ9ÛÃÒ@–)ì“uq½bš¢‚¿Êý¤³ýŒM£¡T‘zw` ™üŽîði>ïÌ#Ú#ÓWr¤i7!Á*RI}{Œn=cÓhaL¾”GÈ/‚GgqÜO´Æ¦ /RLºñ ×Üâ~óT˜h=eÓjªê¨äuŒŽÒ ¸`Ê£ù*<bpA{šl_QËû–/ÿñIèÉ endstream endobj 328 0 obj << /Length 750 /Filter /FlateDecode >> stream xÚ•UÉnÛ0¼ç+x”ˆå"ŠdomÑ.zj}K{ %Ú¢ÅÐ’ÔßG‘R$Ãèr0¸è-3Ã!MÐôxGÂøqw÷î!eˆœ¦L ÝÉ .P*(æL£]Žž¢O'sîm»‰™ ‘ØüÜ}¹#˜ é×Ñrùí1M°T’º¢ʼnƊr_ï;Ô¢$z)2ëk†:닦îü²9ø±?Y× ªÑe5&8&ZAU®©í`ël ^µŽ§è˜¥|ÎÙdÏæh=• ƘIÌ=h!¡N-0ýæè)¦„èCžŽ‘)=•¢>l˜ˆš¶2nÛoæEw.ÍÅias¿µ¿ÌŒP˜P˜JöÆ‹`%1Ss¬)M[ô§ª»A–b-ĘóDàD$N/̸ž9ÿëm`¹87ý›ihÂ%X=¹Œ©'×`O–¸EŸNl@h¾‰i´PH"‰µ$c ×ÂÙ}ÊùAãiüd¥é:Ø¢Wr]µ¹Ò8åN/9Ú몽­€EûE®¢˜ÉÙ¾…3=M#ã‡îl³bt ,¶ÌFX~zhÚ ‘k%N…XšÄ9 ®-ѰÒb‘•R¬ø ·`h¦u´í}Ó“ ݹJëúe¥mÙ½wÁ<"÷02Q#Gas{p ÌPöMº‚j©Â’0SŽEìfêp tç¶Û(x ÂÁœL}´oÃt­Âç ÕÜvL­éLùù–*`.§ˆ{_nè®»gMU9Ì·º¨ÞÑd*ñÝöî,¿Ún‚,Í’Yh"@³çI¢kDT›&æ‚ØËÈuŠåZÄ-8³€’SY§É/SKë¿ìmÙ8±^ýò5Äü|¦ó¤Ûª¬S½èªð¡ñcgCJÕ´!'·½)Ê–mæ[À€ÉƒƒaÚÍÅÇu—jß”þsÖÔ±çDS¬y %<§®o‡ìíÝt7`œ˜éæçf\wÃþØ6ïî0bŽ5ÿZ„g…‘UÔçÝÝoÂà endstream endobj 345 0 obj << /Length 860 /Filter /FlateDecode >> stream xÚÝ•MÛ6†ïû+t¤€ˆáðKboÉ"iš:@°ö©››–…Ø’!Ë-òï;äH¶ìµE/=Ør8¤È÷á+‘T‰H~}Ãóíâáõ{+©y^ä,ÖIn¹Q&±Úr¥‹d±JžÙ“_û.…‚ùféé×ÅÇÓ Xž' ¸.–‹$3Škª{~œÍR'Ù©¯UÉsf„`óM½É>×M•fRkö¸)›W!4ìSÛTÙì8ffeS ™ÇMH}(ë!Sïb²²YQ×ß5Ÿ}›JÃþ¢Ö"-âi¦tÎæ{¿¬Ë-¥öíöGÕ6qg‰v¼pE’âF;ÚȺ SJ`‡ã·ªkû5Û5=û§`×®ŽÛrGRH/‚ý~[/˾ÆåxXÐLP*ÅAj<¦¸òoMﻦì9• âOe¿§¸Ð 7<7§ÂñÈœé/ÂÀ?øà‹”Vé!Î)Nòp‘ÐÏ`}W%—O(\¦DÁ‹üê|ô…º'•³ñ,¥äìÅï)vÜ:xÁh©ØS™JÁþD}îuÎé9}/»¦Æ.‹ô¼i(Uvu¿Ùù¾^f•o1èê%e0Þ´+Šëat”*‡þ¸úAañ2w–ù:‘³òFò7å̓S£6ová^DI±î$/Æw嵊ÛKyq4€ [X$ÆN5惟ù9SV\‰—úéú¸¤½Ch7Ú\a1Z…)_p‘#SG°æäÖ]8BÈ#`‚.µƒ#`nâØ:;‚.âzËmÕF¢¨IWƒ•Ç›¸«›z|…zM³—w™1Âq…&³À'™gd°1Xw) [⾺#zn Ìß6‹pe1²pÂ'™µÍªm(&”b8o—Cp‘—[ŒpÜn ™SÌÿ*2¦]tœ#bÆø._žbgþ!vò_b÷Ÿa{ÓÌNÔ~{A­µù”Zr¤VÉbJmÌDjC"Rº"µ!8S«@M¨5Æá÷aå÷ÿšžW¾ñ]Ù·ÝÚ‘ßP‡4ewI%Î?øå÷ó»ý ´(Ë‘ž?,ú㦣©œËÜ^9š”"Ц#mƺH›Óg?û߀¥4wAet .F¿[<ü 2NÅ endstream endobj 391 0 obj << /Length 1036 /Filter /FlateDecode >> stream xÚ͘Moâ8Çïý9‚´xü'Ε¶ V¡jÙ=LwnqP´0 t†ùôk;.ÅiH $š= Pˆÿùåyóó: :ã+Xøή><ì`øÌGÎ,t|PBχ!ߙͧÞ$ž‹Ÿýo³?÷ ? A½ :Š‚fÅ?ˆ¸Q¬–H}ÿðFäay¿¾ï\@'ÿPê:é±/<Œ¯œ§¦°‡P5ÅÀ¨0£ü×<¾åY´Ü]'ýê­Ö<×I¼H·"~ÛçEªÿØ®³RàÀ’Öˆ¡où"r©!–t}{©Ä¢=YFæa€ßÁÖüå_¾gòლgh:7xÇ3ÆÓvSÜ®Ç|µâ°Ô‚„¸ -èչܨŸŠˆÚGô[Fük½i¹)=\Öf.~%úm”:ÅqþˆFq/$­¢´RûXZSÙ^Ó´†u”FÞ2戓UóM¢2»7 Ç£ÇÛ¥X‰xSŠˆàQ¿)¢[‡hä­b9’Åq÷¸[='Ë#%¢¦@^}­‘â–Åq¤Å†»¾áe`Œ4.Ò¤†Ì¨[17±Hù2ú%æ -'ßVëËJL½7ËjLÎ(Ã-*Æ]w/ 8vjÀ•#Nb8VÛ¾‡Ù9F…¶§ˆ‚@¬qé¨Ûrºe%2‰ïï°²Ò×a­+]ù›4NՠΕFþ°k1Œñk륞_:&q˜˜ÝK™ìHVú ¸i;Šë°Œzk#ÒL¼l"Ýu–6Éž<·iÖ…º¯„š†ÅùØ6Ê<qÐ꛺͚íÙ랯aà»´!ž]sÏ_Oë^ÏÐYYtäí*ÚkWŽlëÊFý$T4ØA­CV´Ø¾†©Û©Q?“ýoH÷ûŽ"-ß{|0s»êÅŒº3*9ðíró Ö´9¤I›3Éö%V!FIY‰UÿtqQëêÃ3ˆwâû4Š_¢5×­÷Çý õÉ5˜O'™ÄÉDéüäRÖU›fÔ 4ˉ`®¢Q÷ÛýDÀín´ËÕ­yåŽ?‹e6 %œ.2•p>@°±åj·=#o™îN¼Šež ï„P»¬Ã…§v¸‡Ág¾I£ŸÃÝíkÞSêœ~åËö[dƒ¿?ð"iK"/QäJ\fãŽR¡yïy”NÃ7èŠcÚÙhä-׿aNçó‰6k…QuèøíõXdæ‰C‘Iœ/ÛU>¡Nñžô+Ïl„áÎÛÈ[€û:]~üÕ¾›é©^>¤|àñ> stream xÚÕZÝo7×_ÁÇëÃQ93‚i_—Š$mƒ<¤®Ð3’³ íß߬hK²ey#môÁ&ww8ûã|WY)¤¥Ê9deÌñ§%pŒ5pi¡pàæ·S‰†bX¦jöûªè,k B2žI-)H½¦ Åï—``™MBSçcR#SLÄWp JxÔ2še ƒq6`¬dx”IõI d‰BÁj+XÝ*&XP)Pcì§ &@Åð¦†uxÓ,7à¡dØ'îú8az‚mqÂÖ öÊ ¼+6Æ *ž©­aâÛ€|2.°™qr¬š»$šK’p‘|È™ øß3&ÿ+x9 þš¯]f\96—$nC l3ÎXY âF…¤*cÉÃL JÎ`¬S¬V'ôÇm` =&ð‚~K¬ä ¤>smRÅ‹¢$•!:´Ù@›]óøÇs)ÆDØÙT(@|h¬ù#˜EÊmÆìªçÜ`(¾;G_$Ì‚t†¶ý3˜VƒŠ°jÉPkm/U4ü£Ê˜4™) ¼‚”dÎw(2¬C aܱ ⢅‹ªË š+ö¡ ;a0Ur#g….g/L`hY«+ Ua$\5¨±O,hs„¯%ß1öhÙßåš_A-ÁJsµp0ÉuöâÅlþîßaþýÇ_³ù·ËË›ÅåÍ5¼#ÃßÌæo×ËÛ«óÅõà0íÿ.~¹øøÍò÷ðÞo@Ñ}Ð Ekfàt°;Y‘¿¼¼\‚ãûÁ¡q'|˜}ýõÆ›‡ç³ùÛÛŸo†ë×—Ÿfóo–W¿,®†7¤óïæÿžûž† Çt~Þø#¬@ˆ£±[GÁˆmE)d/Ëaþ6Ìÿµ|· óWá×·?_cíÅò2r¤H_ é`^ãwÞ„ù?þ9Ç +R-†pyûùó‡'Ie mÞ0Š´ÖX â1´•)&‘1´¥Y„ê§&U‹×C [ÍFÒ2cEŠeœlI¡Ûú@^g0ìÁÎ\‚‡ØaÙ| ¢íóÚýýà'«9ÁIèwåQ]_q[šµ<»€u£^…ù»Åï7 þ¡«Y}äjƇ¸Ú†\ ±–¼Eº6Oƒ,FÑrŽ$i7~$íFG6[mÄ«alé¸@‡²è”bF (-Gñ ›RôL€t‘ÆwFºó‹›EüÏíçO¯./6ÃÜ‘PJ‰Å¡ ÔyD@1 I1‹*ü4”ׯßýó»Åù§Å„X D;((%¢×n£ ¼üüëòêâæÿ˜Zí7[¤+_PÖ˜’¢E|UFÑIHuã0O»¢ê±´”b~ˆaíè›.¼éæ^7£x¾{RCë!ä ¡»IŸ£ªB1üe`3„ P?í¸Ðë¥ûHÚ&ÝoB»h¥qlÄ£h‹I¤ÇNZÑèõÿZ ¢G[ÀÚ©b3=l[ÀöôÀ†±H×Wè¶î9lÛ×ñEé¡EñjOÇXToQí ,j- RÍ8ZtJQê8RÄ™F4нaDo8Ž6¡æ¯ùH‹: Þ´o5´K»‘ÆÑfXÍŽåhÚ„.é €qdm9¹zí‘z³©Þ¬£Õ»EúLPØAë*Ó"“Ó4ð~$19-ÚU{º%ÙªT Ú<Â8žªh5ˆò¨åó³¢ bÝ„øÙ—Cò£¯Õ(}Ô>ZWŽæ§^«‘ú˜§<¡ ßõ37M¢Ä$´‰†ö±ÂFQì,σ”b9¦CØÆÀ†²5eñ#G´g*j!= †FQî1”T†&îY $Ó ê…"CcE`„•G?8ôV©>Ñ* ò„Ü û{ š£—:Ïb˜P„8©ˆÅ÷ðnáç!L©ŠÂ5šøyuB –ÂÑåKÍAî$º(AZy¡Â'óó&TE© 7ÈkšbExxö.<”ÑG]Û¤Ï$ÂMZjŠè›ƒ@p\lcIpø6„Ÿ˜ñ8ÚœGC[üä(Õ/íÙ×ÅÏ¡ù­=ê«ÙÚ‘ù­ôüUzþª=õ$íŸMV#÷±çÃÚóaíù°ö|X;¿ÚùIç×Kîµ +YŸt~ÒùIç'_ÿÊÁÚùõÆ“µóÓÎO;?íü´óÓÎO;?íü¬ó³ÎÏ:?ëüúÙ,[çgŸu~ýr¢üh°,AÃèiQ4F‚î­Ú÷¥ébHFçßPkËC›‘j a]b³Ñi@@4öº#ŠN2„Ï÷Ísìiâyö®Ý¼ÖªÑ¿„gŽ:@ÒH¶'¯É_¡Â3­1ÒïƒNˆÁ§uUZù÷Ë ,Úµ´¨'F ¾GÀN9 føJÜDQùO"a¬Ä±Ð ”¦4†ä'C^WµÁ*b³wp&u‚)+=TUÉ¿K êlŒÆ¾Ö!\õöôD¥áe~j_`­ÉÚªü×Ñ>]ðôŽY2œB †˜Ð†º+)ŸFwö@ð ¢µE %ªûü‚ì/PÃyî•A96­'‘\úžÚ£ÿ"ˆrŽ ¹µ‘÷È{0L™,²Ç¤âõ êSÿujeÿ ÄiŸ6Úˆ?W½¼ç endstream endobj 412 0 obj << /Length1 1411 /Length2 6115 /Length3 0 /Length 7074 /Filter /FlateDecode >> stream xÚt4œíÖ¶.jô’ƒˆ>ŒÞ{ï½ c F™aŒ:zïD´DtÑ{¢A‚èQ£D‚D´Oòæ=ç¼çÿ×ú¾5k=óÜûºv»÷µ6f=C^y{„TGñ‚€üEme3?€Ÿ_ÈÏ/@ÈÆfC¹Bÿ¶²™@‘ž0\â?ŠH(ucS£nˆÚ8@ÃË€D$@¢üü~~ñ¿‰¤@ ì ³h8Ô“Má9:¡nòüý à€p@ââ¢<¿ÝònP$ †´Á('¨ÛMFØ`ˆ€À (¿„àrB¡Ü%øø|||€`7O é(ÃÉð¡œPO(ÒjøÕ2@ìýÓ `äóü 0D8 |ÀH(àÆà ƒ@áž7.^p{(p“`¨®Ðu‡Âÿ"kýEàü¹úW¸?Þ¿Áà¿ÁÂÍ ÷ƒÁ0W(@WE ˆòEñÀpû_D°«'âÆì †¹‚ín¿KTäõà›ÿôç AÂÜQž@O˜ë¯ù~…¹¹fe¸½"ÂÍ GyþªO †„BnîÝïÏp]à8úï“ nïð« {/w>c8Ìà ª®ô‡sc"ü·ÍŠó‹ ˆŠˆ ¨/ĉïW#?wèoôË|ÓC Úáp¸is€Þü¢=ÁÞP é Dÿ'ðÏ!°‡AP;¨# Nøïè7f¨Ã_ç›ù#a¾Kþùü¿~ÿz³¾Q˜=îê÷oúïóY詚(ªqÿiù_ ‚€æ𠈋ð@BÂBQQ@à?éa ùgu¸ þW½7õwÍÞDÀñgC8ÿŒ¥ƒ¸‘.Àño¥[ñ óCn ÿ³Þ»üÿdþ+Êÿªôÿ®HÅËÕõ7ÎñáÿÁÁn0W¿?Œéz¡nÖ@q³ ðÿ¦šBÿÚ]m¨=ÌËí¿QuøfäᎮÿºH˜§ Ìj¯CAœþRÌ_vã_»æ ƒCõž°__/ˆŸÿ¿°›ƒ¸Ü|A\3i<â& ÜM,A[, $Mú/T xvÑß§· cÀ>¡x?ö­°™¡A;.-Y,š`Nrp¿V•µ<5 E¹x=c¦Ñ%րކ-U  é» þ´a’÷&ˆ[ª’¡EG>y;wO*µí5ñïaG=°27B³zW¸ Úð”…E[Tƒ– ˆ¹Ã-{K"ŸŠ&öæÐH<ðÒ)°VX#Ѐ’\yŸ¿á øƒ%ª¡Nª¢Ë‡ëbÁ©ˆõÜ%ô±ù.Ñ3/oŸ§oI^ÌFýp|0_a|±OÅ­Ti*_Ò»¼4QϸǰÖ?©—ã+YÄfÌ!—+^ÆÄ¿NÊ#/PÅO¯ZÙ[rø©!±#6s†öNSÑ>.üüãó+–ì Š/¸©Û>O½+>÷OD_Qƒw®Þî¨c`»i˜¹Ü!pÁI¢šÜêQ+å&Æ,ÒõY™"Ü]Wrì}•¤÷ [‘2½Ô5›'#(¥q1 ˆÀûDãSÐ?½"÷’ù’]zl/íg'E¡ß«ÐÚ^ÎE[/õ"rùô1|GÄ.þ Èä,/Cj¥‚7u<¤îÿ]-òeßýÌÂûH\↻³@¾Z_ça1Ál2ü“Oû+2áþ2w6Úo‹×{æÍ;wä]´ÌyadT¤ÄÅЪ®˜×äq¯æsé';ßi™ï§ ^¤í)U¶$Fv¤]­'wŸŒ!$^½jˆÞ.V~_ ûôbÏ2YþaƇËS’˜~ËL¾ÛëÊÃ’ï ¶%ÓHYúD8z_ÖkÞ•Ud–‘ttâì˜$V7%‡ë¿dZè’ “£Ý8ˆÊá d’šÃŒI̾ÀÅ8©×7M%ðàe­=c†‡äb‰uUÔ©®i³g]åª~ÎcXÃ;KÁ_ûò>]aŠqðóNâ¯:³cí­-{¸oAñ!vP‡U}¿ŠÓJ|Þgà¼'R¯ Û=ùÛn‹ív;¬r‡cM`H—Óß¡¤ð¨:A¾mð‘¥ì£à³ÁëÀÌà¢:Ÿ8{yQ'œÅË•Õ9Χj[Þ^Œ·¿Þ1r(µìØé¼;ä¿°…Ο'B’)N Tušƒ|Vì-îÇ-é­`¬Ä:sX¿¤=ó‚Wí;)8Î>th‰Ð¥*6­ Š$ëÔ\püRó:Øœy •¹{z¦Ó™2þƒ¢â9ÓwRÐŒ!phª;¹ÿ]l°ÔÊ÷ÖMï½s«¦Üð-¾ï—ägW3K·›š8™ß~`p…®dþ4߶ɾ£ƒa¨M¶KÌw)¶ §›{9¶zk«æŠ&¶ëåá•ö.¹zPõŠ`#šô@[s!%ÄæôÜfö­*xÁ¨SÛs0n˜ß¢T½V\@b?µÞŽ' qšQµ&s5øx+vD³B4a'k:9åÖØ m·™ä»šÍÝJnK¡…o\÷Ò;oyIŠæ×+„±#Me± ¿·>˜L/[<´ÔZß;+?=xÈŽN¸Ðã4yßT À“ â·°f0:OœT ‚JJË}]„ÿ¬!  Ï;™dœçQ&ÍoüÆ=ØÊVý͆Td¤E”ƒ“(ê<Ò—ZSäIÚ…Ç›ýËJ× Ú*‚ç¶{~_ayßlt‹:pD·¨>kk2w ×pxnÓ9H *óßjUóY´Ø‘qlxñvX ¯„FĤ/μ.)F$7·ôD"äCŃmÞd¥p~þW¥.Š øT–¡yUó¾ô ìÒ¾QݦÁjG/‰`A„ž¤/â(¨/+|¢Ï‹êu‹ÛCL¶«b"aÙQZËt²¥¦Ó£'ý²°T0è/X$«f@–óW=_sn[’À§<#¡¹+Ö¼JëÀŒ£¬gÔ› ÅÞû¹«9êÖJ3Y}åeì…ÉF¾ž*©Fâ½Õ¿?âŽy·l2¢_DêúËš ü¥­NÇÉ\Õ2 b‡[ì[UèŠÌ¼yN{Ö³gÜUF·k*OÇ#;b;º%hËÍȵ»çwI Â8(^¡ð‚|ÞnCJ¹ËlÕ Ö¼©Xžqb3o8®&a3¸’ÑI²¹lŽ4“°†%<õÞe!{ÍöIûåùT‘©(tpä;¶–tëD:¥ó:[É õ¶ú¢¾uÇ&ægІ°Í™ž,„Ãh¿#mœ+—B0ß/ƒÁø`¡púÀ œ‡KÓ-‰»Ëþx9Ö¡\n%û‰÷Ì犸+‹Ëjg"…:ëðª ßk؉©`Ï90:&áÝ} JÉ»[ÓæÖåI¶ùÌ0Ð!ú¢®Ö"¢~;àFE„‰!wµÈ|ïg`?Øí~À*Õ¬ÌØøç=N£`ÅÎ/.,E™¨Vur\ÆÓTÙ,ô™A pö20Å2Nñ­ñ®bëz× c÷’wËù¿ŒX·°Ž^cN½;û†é…ÆøÊL0Tä? eq‚H¢ìúZîè7-å¾)¬a¯0ˆ °"V€iré°í0–£mÆØÍæ: ¥î­!±Âîß;¤<îû³nŽ0¯ ·S@HÄÊ”ôºù9êjºBÓÖbÊO{)Rsž[/«–¨Cû ½Ü¿·ít7¯O=sžÕÖðuÓ¯þ1íì­û×HÊ%©}vÌ Ü“¿÷ O Oê²>#ÚÿéiXÈpl²úZäÉËåiê„„uk<†9ºšnl•oß%jÔ fR§\ÍIT2Ô ƒ÷©a÷Þ=º×E/‘®Je¾z|Ñr¤Z鿇‹6µÀ0Y®½m"0c)%0š¤nü)aßùº–Ú¬6½W=Xí­…cDôœž"½ÓŠ|-$…ÞckþÛ¶‰ÇÂÔßò9H8yó‰MKs½N#Á-åÔ²¤I"÷');#nߎy×V†òÓ£ï®Ñ*G7L$TЧLÒÔêó¯&1Ròð²¤ÕšÎºÚµçQ8Ð‹å ŠÑ›$ÈRi[IÛt¯ke÷î9[#f# ß"ñö?Œsüèls&xê˜F*™ãæðsX¦Üw²P Æ8°mÎhá?`ÙÛh%ö*ʱçyä©7WêÀé¸/†¥ª«é’N²¶ÑÕL`Xøð íd<•‡É`Ò!e·éJùUvÕu ³†Åû¥qæ¤ÄúWKýCƒëâ3÷\0ì;¢Î|ºÒ­¿À|(§è?‹Þéµ_Ö²ÚgéØÏ5uÉVˆ†Õ(d^lg|ói“÷òz'ƒ6êU²m¹Þ8°_ÙE?>«¼5N¿jŠ¢> ×v§ŒÊ‡Í…rP|ç¶â¡%q·°{ÕÙSØ\éqµQ¾³;sÑõz$D‹õîÙôÄÇÚî7MÛ•O¥­ÍE)¸ž%M!Ãõ¯Ì¦úó#½'e§Ž˜ËöÚâŒ]áw¸Zõê ÷’°ž-ÇÙ- F”o)´øâ܆’ŸÊ œtqDÒÜŠ<³úž5¬àñ!Íò§É!ítA?~T›–MéÝ¢h H7N¿Då¾õ^9ìÞí͵çÔÀ —à~õÇUË!G©©­VÚµO Û-g;VX ÔŒå‘ÂNa9Ȧ¨ÛôÊEùÔö){}ÊÞÄaÍÂ_¹ %ñOˆéXd{· ­mmji^ZèðÅô1­¶FŽ}²žq†Þ gÏ'§ý–ma(¢|ïÒóuiNé¸_W£Ô`Ðÿ™/ž”b»›ðØÆl`fd­µcéÅ.¿äî¥äºckŽ/ã0=2Sm±ÿó½Ã‚,•¤ó¦œJòl2úúVXÚÉáÏgFÍ? ö¾ÚDG¾q~Ï»1Æn /†ûQëZIè®]MÈ'¥•¿Héô—TA‚WÊÈp^¦ðÙdó.*å±#ê˜ïé®é³ÇÖjœÊe¿œ2ûŽ݆8KK”(ylÔj>_J}ë%¾uŽ3ì‘=¢$%±h¬Ž'_Ѳk ¶^G@Ö®pÙæ|­Ë§c%qª*»ßbж¯ƒ÷š² ü¢òH>YÌIL&ö¸>Jê8}zŸö'#eâC^'<Çš|¾/ÄÙë¤û*U_Ûþí0YóFjðÕñHè¤Ïì<ö•'¸†ŽŸeG¾|§¢±ÿŠ|²Ò”êš„­ s;.™'–3¶Pcþ%é'ïß+» qšÍÍ`þÁ!¤2Çù’©›@Öþé'¤˜âd>Ðãv‡0n^f†UÓÏ Ž¿IfšäËç?Ïî`sh½h" Î:{Gû;Åß›Üßz•V·‘yWtŠÒâDÑüs=±>¤ù½n÷r™ó«ÔKcªHÅû\sN–ª¡oØ0…7u£Ž;X¹‹ýgˆ°ŒÊð’K°˜i±ušçR¦ (ÅÚ—WòX.â]TTUE«mç‡Æ8™AÂFk;Û%ŠéâýÑéVèýˆÊƒë6'6oñv þ‚1£UIC‰~oúƒðŸ*×î½%Ÿ&xÄLã×w2›NwTš?¨ä…f=îâÕ/V6mUR®óöÌeá)È ø#â*j%Îï/r‡#¹¶*MÓ‚s³OqC«Œí:ŸYY+—z{âôÈj¹ ꊓt«Š'®`ý*‰±q¾éÃb±þ •3jûðžŸb>øÀœ;v!,ÏjØ4o=„ Göˆw+|·fÐø²†E+TàŽrîëy¤˜–õ.:-4~˜ðmå U&èfì: €'”õˆŠ`IŽL­Íew¤\ËXÙ5Žo,[mX±3/þؾý]=¼Øm0óHÑoëKÄ=CöXÀÃBÇyµöùÊT›®½F³L²O¬ºï¹ü3bÏÝVÒ–$g\}¬JÐ%4ã>üäÛ ;Ut‚2+W¡©‰ q{¾ú²ž¾Ø]Èñê%¶ÌÄr0ŒxRˆÎÎà y±ìS3WÝ­dÒ*ënt©s aW­CfzŒM¬{@Úú¶´…nv?ÇWî²KÛ5Âa’ §ÏÆ£Eín½Ãêœ*·6ùj˜œˆØ}&PH>ªÄ1bjÙÃG…R%4¤q4’ìúççiþÀ©žJÜì&/´`Žg9NÒz¿d: &Uy!YæSÈ¿¸é¬ßdϨI›Ûž×"‡„¶*ƒ%Wkˆ¥3†qHŸà¼$œŸóØÖ§`ž%ÏŠ/¶ÚmzSF¹‘}g+¿9^Ú;x„÷ˆ}KI…ÌÑNÚ•þÝ¹î½ ŸAÉd)ͽçf GƒH??H6W;ãë¿ÇXÎ|wÕç¥òa·lõ æ·ÛuÁ–LýœDꉒy±äØ%¡<»€[¸ó‹¦Ñ=oÐj9‹~Adm“û/*?tϧÎÜS:š®1O?ð=~û&K€fà Rï¸d¤¾Z“¼»½æÉQ™Èª§0ÛpBè¢Øâ4’[{zè¼Æ0NI‡Ç1ŸÂÃI®@W×==«•‹ûÖÁïÓ¹ž\émg{§q•¸Xß>ÅP:ÙH”­ðÝ\Fb{5Z­ü­´frÝ•íÜ÷±´ºùEš^Q8£Ž¯åÓS¢¯£/áÇÁäzÓs VSüQï’ly±ÅN‘{ÿǯs´öQªûvÂz9><ÀœödVÇV¼òÈ„«Q‰Ù®}ì¡K /J“ïrà{ºëé%þOáÌÝD¶î­ŽF>àÕyÑ«´i»-ÿmωÑâöâ s¹òĦ@lþ8´ø…¾ÈýÁ̉RÌqI{M«ËýÒi’Ëát†Aœ]ùµ³¥ÊsUÝ®Ãá¬@œ-Òä.Þ2£ñ2åƒ4p!iÖ€R§Ë ³Åt¡#<éêñõ÷t‰Ì¸+¸y5V†÷¾FëlÿÌmkÚÕ[|x€_à›Õ™ôèaÃyßtmIy¹º‡èV‰=tní5SÓÃŽ‘‚ëÐÂôa9¢Ln¼y"súUÇSR•âŒKñjÂ]*xØŸ&+ºrËlÝ·Ü"âzG¸R}1ŸÎì Únw5«Å î)¹ìäàÎGeÌÄ¥@ËoðIûÌ–8 Œ»oF¼·¦2³©áÓ®«ÆÞEï[Ó-‡UbI7Û÷ekhk~tšHŒ~úèÃûÄ—Yÿ‹©CˆÆ\ÕgÃëjBõ2¬£ü–¯^²Ç´×Å=m_¼úܨûTG¶™+”R O7ø•×ÜÜÌågÁ/klG iá¦ýÂIþB[ÊåµÅ\8NO;ždcŸÅøFµ³unÍwJÃî®;h¢öóô8êã ºÍí±xlñ?á…`°-¿Šß¶Z:Rÿœæ¹K°Â=?¹ ¥}4•èÄh¸®Z ¢çÊʘ2ßWvŠ˜ãºP™e+EênŸ`bL$Ëk¯ÖŽo_–χ¼jèvÅü?_\*4aTEt^ÐdQÁ'@•°oŸë–ÿÍŒªý endstream endobj 414 0 obj << /Length1 1460 /Length2 6185 /Length3 0 /Length 7176 /Filter /FlateDecode >> stream xÚwT“[Ó5Ò¤X¥IP@Š„Þ{¯ÒEj! I¤ƒ ½÷^¥+½Pª€(U¥#EŠŠÒ;_Pï½ï}ÿ­ï[Y+yΞ=sfÎì9ë ;ë}}^9”5L…Äñ‚ù@â--50 ð@üììpöNÁnÃ`á(¤ø000)Bpx¢ P„€`aq°ˆ8àÄþ"¢0âEˆ Ü ÅPG!aX vÚ·³Çá÷ùëÀ å€ÅÄDîýrÈ9Á0p( ЂàìaNø¡@…Ãpîÿ Á)iáÅ@WWW>ˆ–…±“æºp…ãìz0, 㳜— І8Áþ”ÆGÁ0°‡côQ¶8WÀ8†Äâ]!m`~w€¾š&@ Cþ&kþ&Üü9˜üw¸?ÞçàÈ_Î(儆 ÝáH;€-è(kòáÜp÷¤Í9‚À¢ðþ±Æ~¥(Ëé ø ÿÔ‡…bàh– Gœ×<ƒ?f%¤ÊÉ †Äa)ÎóS„c`Pü¹»ÿ4׉rEzþµ²…#mlÏ˰y„"áÎ`jŠ8xˆâ̆DED…0gÌ j<ßÀÀ ûeŸÃø¼=Ñ(4À_Ìn ÃÿPxb!.0óæíùŸ†¯(À`€ ŠXÃìàHŠ¢ãa˜íï5¾ÿ¸À„—:ÿüýdŽW˜ ‰pÿ‡þ«Å@-uU=-ž?%ÿm”—G¹ ¸ìO)7¼¬ûÒs±Àd×ÓCð4w«µUžc¹"Iá1W3å•–ÿôp |S M­ŠPðpušßõªp›7×ìqBx—y´8 }›û@°d=[k ˆ¼É×z»lr¡3dçV)aŒ A±vNÉá¶ÝÛnT …K±_ÄáºÇÉ:a@›]ëAòüþu £á6;ážÜ.JBéO÷Î~J7'ëøª :ÉNôêÇ›¸i{=[yréšiĨçá–Þi%,êÈ^µ÷æ½6Éuù ­n¯ÿj\tD‹ÜÜvSv8×Hãè·K-ÅR~d|bϾd¬o Ø12leH]a1mµd9³>CY^ÿ!Ïd”?{Øý¤ÿbý¦ñm–oô„‹õ™é¯ç ›«¨‡ÊXX®€„|ö þÍ&×íe#ªÒ;ŠÞ;?È&3c»L¯´|«­;<,÷·+¾BÚ¶nmÊPñ²jµ,²~ÌõÊÕÄjÊrHøQý€@Ä}ߎâZŠ=½~C`.Écoô)ïðší¸r4nIÑňô0ZÝZAêm͵1[FÂd+j¸ =¼’bá| b\Q=©éòAúQ³XwÑÑŽ9÷,"¬ãÒ~xô7‘A(û-åIÖ®‘ÐLu‚7x†&¨G.\ýj\WÍ߇Fe(e”„µºI÷Ù~P­94e17PÚ}å¦×æä9¢\\¤[¤¥PM#D=LÅ¡«·³Ó3UYö¦ülêYë}%lsó ®~¿·pèB{ªÍ=5.ÁãñîúÅ4—7òuGf]»¤!ÎÝÖÂKàHµÃ¦A *Ž@Øû±½X©5Û¦zÉÇQ#lŽˆÝvËm'6sªT±ÞNÿœ¥ŽÍþÇ S)ïîƒ=ßû]c Eæ„Fe)OxZ¼h±% úü-§Ì3Tsx#¤½¢ïA¦ØB_áÜáÞ÷ºYi¿k‹µ9{Qßõ\ÓFæÅ)‚o¥Ãš6(€›ä¡Í+ÌL¯nÒ¹}k¼âŒ[žxëß|[ÄwÓ0g{èÝN³<”ÀU$J¬¯7ò Ñýd¶–ß!QÇ¢eÞ¿™Š½ýR´afsàœ§ôh$0§´â™‚jv 4È^êý=yÃæ‹§= tMØE WŲ0Ým›+Dk¸ÉÅœl[ ú\@‚©ÚO¾«IŽvtt«g{çÑÐí2 èê²%Ŷôñ›cÔT>7ÓµÆ7ý‡îù¾Ÿî ¯‘²¥2A }«}3…tù ˆßÌl`ì•4QòïŸAÔè+‰„9-1Z·÷Cq6¾¾þÓϵ׃øÍ¡pÈü®àÖ™Ôó[Lê ÷É { îWªŸª¼Ì¶?š„º^«cÐZϸÇ]׿"äÍ÷¼@¬ðFeömaHK-õ˜Éjšw ‘ð3~o ÐwK£JºÁ'€EÂí>ý¡ MGù¸îSÄwi׸™k’ŸUM"+»‰Ý\h^^óö]TæeK¿nMËÊYçᨨ«g“¨é¹²êߨ™éH¹¨M¿+X6B*xº=[3uæ Çne7¬û¼ªšœ³ð‹D¿_¥îeC–´õÊ[Y‰ý1Ø*‡²)g8EîqàAÌA¡ÌàÍH AØ·”–fËíòÀ‹Ôö:dÆ3ï г‹€¦÷b#qåB;—Þ Ô}$÷«âÕ41zøÜú«àƒ,ÓУ:i¥QÇjßjÖ]íš1­õûO{b “+wÓZÁˆCU¦^äð©{z'̰»ûì(G<•† `ô2gT˜§..3z4ùMk—s$2$¨Œ‚eë‚ø€b„=CjÖÞ){$°¶ú~j!>Ø »9Ïå0“»ST»zW=QUÖp³NZ':ÆW›T¹£ÜÞ×;”Ov˫֙Bdæ^Ç…¼!Óœe´òD½žþÖ)K/£#$0Ç”ÎcjÀ6¥Ê—&ùƒ­÷´©-½¡ À{ËÏgåTñÎÏËëu8IÚÌx²FÐßÊZWï PåbÂèîÆÔ1ë íæ=6¸i­é ”r¤ùzsOJ×5WçT„Nè8ä£xâ‡{¹†–tš÷ebëzúnh+”/ëkíŽÁ7Æ.OH'^¡î~·²tié§÷‡;Æ™Šk¢+ál›#^›Y¬ Êa³}a§ «šñ–)lt“ÔÕØê›“:Lz9?Þ¤sÒs^¹¶—§nz3ÎÇvœŠHì^R‰pÍç–àüWå‹õgLú÷HdÀÑ2þd”[ãr£]³îÎ' ššÞá^ä°mÆÐ|ÿºBÞN_â$;ÌMwc@+3©ÔDX`¬cÇ;‘4þ*âj¥ê*zùæˆ*é­Ûdfù'¯©€Ã#·”ŒH<3Á¡[àƒªD#Í“a!wc /ßá­…ä^õ¸‹ùò6«FRåŸ&Ú ÆÕ}Z–M«[ëNǬN\rNÑHŒ¿á%-#ãçé»|_®™ðâVRSV+˪ù=2Ç~ÆSHê ãÀuˆÎi«ÖiËaÙÍjëtCÌ–\™S·F-aTJWôq— ¡B_ß*̈?Au Qõ¸i*¾m“K «|Ò¥]Èü^  þ-öÛm™_‘3éÉ2§zbùüÝгìåŽO-‘þŸù03d•D·¶”LŸñ•ž4|ݹ²â_ìçñ2i)SNrumn˜­@þ9¥&!0,æ‹x£<Ý`|懯 cÖð ø‘0ÈkåG·è•ÖÏYE'˜=[ĹúC¾ú„—Ú±åESVw’cÁüöÑ [åNáÓ²3–ùrw—?´?li§!»Ç¦#wU4%*‹lDûôÿ(ÿJIú`*^îDÔIÎãÓΗ b›Vm‰Û‹©>7I‡âŠ[ѳ-»É×éT ¯øÆk¿Ï®Œêœõ’h\ü.LÕ.7»7ÚceµØê ¤$¼Að°&Ú÷ìÔ°ûP˜ÑìãV½üò|üD¬dßÚÒý64‘C™o{÷ªk.^</ÏW>šÕp< xiXÐÕÿ»bÒœéèKaö§ª°vq£ïàV*Bq~ ð¢Üë\¸”JT*ù´‚±uí݉×k>Ïdhe0b•ÂYD7ñX,…çû[¦F¦OOÑlŽŸT¢«µlJÏã”U#¸foÌä ”âfõ–àé6»›#ë‰Bª¸¯ØêËAÞÞŽ>šC²_¾•¾¾Ü¯"ÕiQbÿq˱"½ N.j=»/‹µ¸±ï¦rÆDvuý¦Î^PÚÃðï Ê´S-ï/ßcƒlø3èMVbmjóò?š9ùBÁ¨*žåÇdÁ˳ľ¯”Ö‚­7Âï)”;oup<¸¶®–—Þ=šBŒyi6YÿúÉ›³ÏGz0”•KÜ|3ÆæZæë»ÑòŠ Û1…Áë¤UÏÆ›ŒIvÑA£[ޤ¹þƒ½r9,TœŸÌµé?P_%§¢Ýбð+ÓI¬BL¿{ï.Å´]lá!¤áGïÁvú¤úmÔ暴Ž~)÷ƒÐ¾ƒ¥ |bE¢þ6þÔ1¼¥i@EÉ~”cEæº ïÚ\9£Ub悬X8k ÊLV3bl®‡£üzÕ£­â.÷«=C‰ ^¥!†¥ÀxÔ ëÏÓmB‹ mÇ/ùZ¥K¾j¸9 t̽±Ä1—¥¯Æ¼÷2þÀÊZVŠ•­hNàÛà·˜ÃÔˆgs2«J—ÂV&îL׌JTì}ìùð4ÀÛÉ8c•÷gּܠÖ kí“ñé¤Û(Kkm&g-(‡´\Õ‰Sz]’Œø>co¦be}arK4?­sf³×ÂPàZ…sZíèÎÆÂ–Éí’3—¶ðƇSj‚H™”ìé~9摆e!¾b¬x«y£„*yàËjD[m5”–fñ”à~ÁÞ6+Œ,orŽúdöÄZK%ÆO8—’xˆrGTâÒã§›µg[Xbæl‹µJ);…¹±µ~Ó2+ë<.JDZšÇ·`|ðÿUã+B¸cÊŽ­a…g"*vQM)oůÈK‰±í\üÙ³~“-»A8vç°×su‡ÕŸœV*±ÒÅwظ‹¯ØÆgO夔2?HN?# ^¬/ˆtƒW†=w¾;ÐXQ’PF5Žþb—¯}ÁÕÝ|vÜ,c ËïìôýT&‹ïcFýᮄçÎŽA“ઠöì×ÑEÚ¹£Ts¤­Žës6sn¯Ô앤zü‹B ÌãÌ1ƒ¸vïËÍßÕž}K矦/¿s¹ ˜8õt­Ë”¼2™b,úèĽÉPÏÏqŽ(ÿFR×ÊXòÖ¯-(À«åÁýÑ£—]œ«3CkNž./£:´qÜÙ?Ó TŠ©U q”–8ÇÑÞôÌ5Afö¢¢zåâƒTúKûÓߪ.Ééds–aߨV±sN¡'Uoós¤ð¢Ã(56|*C­¶X¥)mé®&$“q®+JJÔ8Tvö5Î~R[:àÇÒ2çÖÏÉÕÚ©Ä¿ÕÖï ƒvó7ÀÐðM/ˆŒ)DY(Èç̇¯TÒJMcb†¬’6i3ÎeœüæÓm©Ú0ÆL•P óW™¢a48iï'¥EdÊæÚëÔV÷}ôÏX¤4¦Ïd”–5ÓÓ9jx¶Bó0flüäl¦"€nãhV‚õÏ&†OKýIê¸ ­r0€g{r”eñ†¢Ý=]¨n4öÓÁe¥‚]„c‘µ,R—gk@B/6™Êïþ.¨‚.àS½÷­+«5Œ ü2ÌGd%¢•Ä[]û2³†è” 4”ñÙ¥Rj;«¡Eê=V?Þ$<àÒsÛ˜‰[!êt#â›°/¾CÖ¬¨J¿–ý ÔK­óyÕD§^pi!¨qï@Ü™˜®»×Þ]cºöTYBÒä,û}à±O‡×fIÃ,ù(õµm ¦í¤¥bC®Óz­¥'¯öhQÊŽðØ¥A|°_âï+h j˜ÕOo.Ë(Ýù©‡ÞK¼½6ïxg:{;NV?çÐK’ël[ÕŒ˜‘”Öû^°‹¡Œ¢$—oÒ†y~úIþ÷Ä?âJ?Ϭª¼ï¡~OBÐfÀ¶¢¦µ;ïN&J'Ôböªlh»“-e%ÌÐMBH‹»|mPÔ±ïµ]t2.´¼g9Kòrå¢V³š»ZÖ‡@¼ ÝØ—¼|ê™èÛ½r²Ëî²/¿Ñ}y$% $lOBw£qC ”n”‰[;<tÜ"õªï,÷u%·o‚]°:¾Mþj&Ç„’m`“T£ªümÑ"KÎîzÃ’=·æÝ(¥¶y3\BˆUÞÑzWš4}÷€¦ŽnW¼ãå‚þt2Ÿå,ÕLKZ0¶ vá3(¬ºÚÆV6ðV2ÿÙ"ðt¶HŸ‰C«Ñ=2ÏD!?Üú`¡±0’‡\ÎõºFÅÞKSYlyž’ð"3Â,I*xº¯ÕgÉ`n’ês7Å¥‚ùHF×Âa.ð}Vþ|ÂãW”)^¼•PM*â€íZbêìï>½ÔÔ„gŒš‡ A"£e*<Ûû³å#ªfÃÚÖ¤ɸ9ü DJD}ÇÜIžënC$¾e¹^ÏRÝõ²Ñ^ý¨¡ðUS.§Cä™õ7”.‚ñt8DÓB4lTÖ¾ÅJ5»”ö€‡öž²p³D+Óûo&ówLÖP?ö@ ù÷L•ÔØ”Q)=Ž?êãè }ò‘´»(ÿ±fŸ ¨všwlaBßJáÁg˜AZ>]‘¤u%«n˜®ÄëX1 ÿäÓqcs‹sûBý3jÿA#}Ni¿¨† ­åwP «ß8jÛ£ÐØÿÇ@?\¼‡Ô¸…g“8Y£¦¥íxÜ€ØõË3¬s°Ai«ýaÌÄÚ¦f<‡¸±IXgKj,`Áîy~¦tDh0¡ÆÅô˲GcfßõµÅEŸæÑݵ#^-œ%3”™áZÕ³f:š@E4ø¦¬H‡ _^èìñáJ!׉£(yÖóÀUè-ðvÿ¼—cj1'Œž xsF½¤U…²q.þVÏΫ,&ÖêŽ=zÈ`•½ssé¯^§t÷à!ùpñ×^~¡û–•f/5>¡G¯¬tïçí?á²úù,YW·§~•óøâž`¼ÐÍÄ‹"ÿ™€'´Z³¨f2!n+™·zÊZÅ—ç:|OÇì¢ÖÐí¶³„H¢S‚V¡nðU›Òü¦Øoë4¦šîÎäµòíõl²wéCú„WY×ç(c•®×w«5mïß;R3xÅy:èžþ)ø{üÕ$4¼iùÌjŸe~Á19ûT¹cZ¼é5•Nþ*ÛÞ02VEñb‚pj‚@v.‹´› éZnñ'½=·-5“e˜^ÛÐpŠƒ6øÍEÜ8¿6 ¢)Ëï‹¶p3ñ»1gaû­%w¢jÌ5uƒ@Üûõß?ð4ÈJÃøx'PÏG¢WNèËé¯'=íöEôQmt™ùÐëñ\gsé@%)¤NØÍ’ºû¬å¬@XB.}QÔFbV¸7vË=rÊí÷ý?í›úqvq·Ÿ-;ó•‡÷í3·M¿/¾Ñ9X°ÞƒH0rØ1È|~i—]ÓÚƒÔZßc¤V%3¦ÿépîêuŸOkì(üº¤,ã-¼îÃpu°ËEmOÏuö ^Óˆ…,Þžì&>”,Ó4I½…æå¬ ^Ô…ÐhÍ—ÞmÕ$­¸§žV—Æ>žÜZzŠy°§'z²3§‰…Šžµ¹uPoº¨h“Š`´TM÷>*%ûºó€cFZj-Üß½ñâ)ZF†´*;Ñò%<½]ÄYD½œâöô>® ê’8Àµ>nÌïÕ¿c?~lhs—/1Ãb›1îÓuŸçóü‚Ù]nJÇœƒÚpË QÑD¨BØ]ƒ±>â¥ÉnÆ^l©úìDþü&5üÍDô g†v›ÿÆü²»âײ;ÔVÖxØ‹·§¹¼8 {’ùøO[ É oIËIŽ{ƒÞ­]«‘pyçYà]ïbxÌßŬ:àµÿîÔlf5…Z±9j‚^ËçÌekUÍ*‘wÍ ÑµŠŽ–÷!!91Ô_¶„ÔìgŽCAÅ‹;XcYÔ½jç=Èf?ƒÐ ³¦š¬V1Wc±bÝ« A=@¤×/¼ËB‰n’îPjÊä«É c¿Ðl†MÞ¿«-ñØý“¬[àe1ðáÆ =úq•ÑVæCÍWÅø³¡]£˜ÏâÚ‡d_#8-½)”ç7û×O‚JÐnöVë¶fZ_~Âr“TŒƒuB~: þ]/§‰ç¥93ѧ³ztbñª²¼¢Ý¢)ä$§©û¿öé endstream endobj 416 0 obj << /Length1 1478 /Length2 6403 /Length3 0 /Length 7390 /Filter /FlateDecode >> stream xÚtTÔÝÖ>H—( ’R3tww‡äŒ30 ’/!ŠÒ­0‚4Ò¡€t—´Ò t|c¼÷Þ÷þÿk}ßšµ~sγãìçìgVc~E'„D Gñƒ€Re]# BÄ&P ò&æ0ƒ =¡¸Ô8(#!`S£0~º8@Ë  @bR q)  Jþíˆ@JTÀÞP'€®@ ‡xs(#ÜýPW昿—nGHRRœïW8@Ñ ‚„:‚á]0Êâ†9Ñ #¡”ß?Rp˸¢PîR‚‚>>>`7OÒEއàE¹Œ ž¤7Ä ð“0@ìùÍL€˜`â õü#œQ>`$€`PGÜáw‚ ˜ÃÆš:}wü·³Îo>ÀŸ»€@ÿJ÷'úg"(üW0ØÑáæ†ûAá.g( ÐWÓ@ù¢ø`¸ÓOG0̉{ƒ¡0°ÆáWå`€š¢!Œ!ø‡ž§#êŽòð„Â~Rü™s˪p'e„›Žò$þYŸ  qÄ\»ŸàïÎ>„#|à6ÎP¸“óON^p¨‡DSå "þ7æAD@ ¸¤0â€ø:º þLoâçùeý„1 ‚Üîg HÔ‚ù#ð{C(¤$(à? ÿ܃@'¨# àq‰ÿCœï1ÍGB}V@Œö@àÏß¿V6y9!à0¿»ÿꯠ±¾±‰‘!ïoÆÿ²))!|ü"@¿(ú)2qÌ"èŸi ÀÐ?eüG¬&Üü]-æšþ®Øû¸ÿ àŸ¹ôÕBÜÿ¹5Pèˆù€þÏRÿòÿSøÏ,ÿ›Èÿ» 5/ì—™û—ýÿ1ƒÝ 0¿?Ñz¡0 ‹ÀŒü¿]Í!¿‡Vâõrûo«& ŒE¸ ì_×õTƒúBœ  (G×ßjù›þœ21@xB>+~Lkþˆ-LJ˜§Ã#É_&frþy¤*ÜáôsÄ„DÅ`$ìGŒi2f' afÑ âûKÄA8… `èœH⟕`LJÌëçŒúiü ÿ ÿÝÁ¿ b˜ˆ‡¦Q#e ºcø?ˆ€þ ÿ Áäu‡yyþþÁÄÑ ‰ñFýÒ†æßû_/â q$žG8J‡?¨ o´¦ Wá”n§öW™¨À)›I•Âvú·! 4ý¨ ªlÒ?áÆ"͸5÷„#cmç®]SoÙþƒÒc““¼»þ‹XíÃýˬŸ†–Ù`¥Ö¯E:jÒ¢q©8°DNÖ‰å´ÃY+ç˜ÚySŪiÆŠôÑ.ÈÂVO®Ò]‚&a •ÜÀ–  ˜+c^§—êz<9ëÁ’¦ÂKB­l™§uå<Õ™ˆYëKlöùhÓoDƒkbϳ‡}Õs áÝ%wÒbèW åãϲX'†ˆu„°h+¬²Òn_. æasްxLè¸q;–kYfŒ‹ª§2!e߈Ò@X5—5œ_ªâ6×íÅ«AÅ›ZäåxS•ÊZXZ(4g{€8þS± ⻡fƒíƒ-›cãcw’c‹?ÞT›pñaS}–à³oÍX~Š0”XxAB2dÿè½L&3XH˜z-ÓðÕm·ªæt2c¾×uo>'|¡ôkauõÛ·éò½ôöò‡â)›4$v}9xVÏ›%| dD@cL‡²¨Ï'XÓädÒb©uµAHm/ÐWáó4Se, }ZÂÖ¦%WÁ4SJ0Wb Z7ãyŠ;kÜ3¥çËÝ ½kDASKSØÔ ߃n2ÈØhÒÁ ñ=Á}Egg5`a}›¶ûð»aN9™‰Áõï°œSbÈG¾$÷«i†0d°kòYm²ÍþÓð8{^Xá1Äðxü©‚3­˜0ƒÆ‚Ø{ÈŸÞ´ŸÚîmv?U×ýó=ôJwÏx¨â‚=+£J_åI'[*+ó£•i^qwë_z Ë%ubÛ9QÕ²þÙdj Æl»Ùºõêã/{_C¸™Ia5”C; ûY /C/Þå)¶³C9é=¾`ÿÞª!bDCùBŽ/Nð¥çãÛã=ôæ 5ßÏ;£/.Wn‰ñÕ¾f~?ª§oe²ÙÜõD÷âµ»÷A+Y&SdbêÑdg‘RIò/vjx­¥r©2謅vR¸{\$5øP/j4Vû-vΈt~Ë·ÑdX¨Ú7>ÉdœÞaÌ+léÅ/…NWoÚ籓Jo],ÜkŒ‘éz•û|¹“2œãÙòJR¦Z=LYÕ>ÂìkžëbSoµaò€Z! ©cièvX0;úiÛ°pã±ä„äÖýxOÉ(l.ûåRf²-ä´ù©”޳­Ï‘ÝÏjXðÃH3l™Ìç"8…D|(Šaþ$kì£Bæ»”•>s][ú’×ù«lú¯²)?ö›·ßS£°™|e3¬ Šî}fmø¼íŽÚ=ô,Ô„f?~ÃVpäd—¯kViÌaòN¯^[<¡œ×(u|Ë Y˜~Ñcù£“rÛÒÔX1ÉHZ{S¬Ä„'â«jD– ~Æ6ö#²o¤–žÂJã_ß$±¤dz³O7jbÔž=&[8Û)V][E?v>1ð шȡüF`~Q%=£ÎT4U&ܘaûÓÛÖ}…äRºL¢4ð›ª~ªTÅ`ǘȯ0„9v•.÷A>«æõÝû‰A¸eÀƒ{á@Ø o¦2ûz.MXÎeðbëjÕE[ÏòðUË_îʸƒ7lIB']7õâØgÖì¤/»Ÿœ‘–JxùͲ#RæŸ{;9z´óжú=b½œ³Ë<»sÒ²uÓ”¯»•ó•Ò8ÈiÖè˜á.³ƒè‡~eR3k¾òħ‘{ãµ±ØÁ¯.ýe¿Ã?,+"]ã¾5G‚é¶÷d 3Ù ÿ²-Ýâ'¥x?Ž=“¥Ú÷²te›‹ònTZI'4ü#ÂáÇLÐå …Ù§¡ÎŸÃ.Ö l¦ÿ¸ôæ év àê7^nSi蛂ù]°Ð‰'Óä‘ZþW~WÚéöµÚö}¹º—¨z:ÁIõèÕ99J0n”äj1¾oixQä¯ P)<Úî\E.ÈŸwÍí"éÊÎtVÔ‰m£°«{j?i;\§®}$-Z‚_àÓ½Ù€»¢‰ôØU,vV|¼`yêõ&¤mn¥ý ihwk˜Âyë+“Ê#©„øi'f£Bœ9@²"ê6é&?ú)ÏR=]Ð[ïºôYÒjôµ×5¡ñ:¤v}øííb°ûŠKoò{ý0«¥¾±w<ºÃòýp5¹S®ÜÕyÖlq¬ tenaOôWY¢4ýÜöÔ§Á2ž·éòÍ}©ÝõŽÏ Õ°à)HËnl{¯… ¸o¶X¨Çg£7ªÒºl§Åîìfù Ûƒ÷r)^õÅX•ÄܲnîSÍÊoóahÅÛ3ß!Íõ_ƒè€Ãi)‚||»Þ«pž³ÔìK¾¶kþ uåùä%~ïfÀÍr˜üýbÿÃØç)båj×%¶YÜùu†8{òÏqvµíåöUEmö)y;sz=ÑòõÞŸºl­/þº—D=~iøñK‘žƒsïLcó|x‚(~êµ)Q£ÿСË7—~ðÊ“§^Uj9C©2í”g~sµè7ƒ7Îî5Þèq9º‘·²i{*R¤‘ÖŸ—>qfÛ:è¡ATf¼4Ý>|Dz\˜”4(.·ÅÓUp˜ªšu£¾¨TQœík€J¤‘Œ êR·³ûû©çê«ó‡’šß“œó‹3†p–®?_žóRN½²PÝzr«GàÛÖ–Áv¶{Z3Æâ7[¦-™Ë 7ðvÌ1qO)nh‘ò–¬E¨k ¤˜¦ý‘¢—»Ê.æ]iÌ`byû¯»3te:/®E^ï¬Ë§c}æ:Ú:n? V£u2S×çã]§ñ¤~£~U°h+X[ìQÕŽÛ{„í×Iþæôô>óÿp•b”©ð1„"-={CwRA«ýŠnc´ÜõD^ïõ£/Åm3­±ÀõõäAC¯•‘1=´]&=Š=$Ît—7^æ'=3’Æ‹aiÔ>¹;h’SsSíøÌzáòØv4‡‰‡D:•¨%ð›@źã1™†×¨ØµaçåàK®LCáiß»µOX„YŒû¤ÐnoÏpÔ¢´ å>æê_ïd0!ÍæCÛè}mÞÖá7Êñ,íf·VÛ„À2OqDÍ·¬ÖsÕ¤oñéqqQB‹c¬+ô [54Fû¿²´È›Hm+LªíÒ®ë]“[´Î+dÞð4¸.šã‡6‰8ש©Ô¸&ÌL¾3¹ÁckŒ7ÄÏ÷ ºä#‰¾¯W«J=¨Œý½ü˜Ä’$ÞRíß6z´'Ü8lMü~µ}ueùEÔ>Ví‘]ºok|ŽiV`,—ERuwT¸º¹éø-1Mk–ÔðõÙ#¹ ©^3»ó½rc¯$ïiƒhFª­Ù&© w…M§ý»ö{½VÔ2œqú¦ "~,}äQ}-AþøÂ´0ã̇§lÏ…2æµÇ¨Ô¢Óƒ»…uå³ÔÑ®Ý$…ž2þ:…$bmuñ„e¶Ò@ÃÁ¨kè³UÀýÏÀˆÇAù:cUÆ”1…R!Îè1·Æ×mŠÂ» ã{Æ$B²ô‰ãVïœj&“/´2¬gßÑ0—2Ð8nMÓ…\œ’âB5? u¥+®#¯b¨ËZ†Ê®èû´¼Ûø´Y±‰ª">?7›ú4ƒøåEºax•Õ켌i«…#îãéyGÞ#ŽÅ ¢m½†Y%cQÉÈ“°ÖwØñè,¶öñŽŒw.&_çVlŠÍ; ñg¸+ï±â|ðßœlðPÇÄ%/GØRé±"KÛ-ý e #9i‘/¤4•ïØ F‡ó?`‹ù[‚÷]Ædh‹0ÜëÕæ§Ÿ˜3/4^5ˆí/SD«s…uÐt̞ѾîSÝšÔ0o¥-gÞ¶\1ïå¯Të+µmˆRjóYtëÌ;&ÏUåi¦9]ßW ¯ßÀ'+Ž›wbà;#é{¾|U¤qPì”vâ_h6¼¾‚”–.‰Ö~/Ʊ­V °I×âRwÉÂu:Î4´Pñ¾4Šlת£jsí‰ÒÙ^õ¸&ò±\?õu‡?Š·F£,’ÛRÓnÑ•PÑKJõ “HħÝóŽüè>§Ã‘ÌG¥´jýÂúØ€§ÑÏ£ùÄ}_O*Fƒ!ÎÂÏ÷|=ž]/²b‡Ôñ–Öù•÷:t9¯—Mùó9•hN64c'¶Ë…Èi^ŸqKÄêGcJnhTÍä÷ Å[ýüóà“Qõ5“ðêf¦B·<ð·Äb]¯i•žIÔM3A9‚]ì±Ã‚î»5c¢Ÿ{Ô,mãà_ñ^úò»s[³D’Â.7[*É\xcÜ’PûŠŒ¤³¶r¡±DCË3ä_óUµéã¢ý/®q™_®j;vëÏó‰4?‡ŽĪ7|<¹lä½·XŒ¥=Àpé7Ðm0©žeã_š}2Ãõ)w¨b\;ǦžZ+-iCÜ—h¨÷ƒ°¬g·@¶fi/ºŽs°¼n«NÊéÞäæ‹N¥0›ù«cî¢ål'ÿ2Â*œ_ Ú¹¨ýwúåtGërc š°Må.F‰‡áR‚çFÉ8›Þ3ñTÜ7.‰NÄeÈyÖ,Ay RpJ—R9Ìä«êlÑ0¤‹GràÕÔ¥“ +£øVÄëÆv­4I¬@ž”šopw:-¦eº.‚­ÒgãêÞãϩʥXäýê{Ö…ÙX6¼¹&­Çð÷CÉZUFê¦eè> stream xÚxTTíÚ6Ò"t HçÒÝÝ ÃÌà 2Cƒ¤”H ÒÒ! ÝJJ—”(H("è7úúžsÞóÿk}ßšµöì羯»žçºöÌÚœlF¦‚ʤT‰@ Šeªú¦Ö"@(&ŠqršÁÐpèßv"N ¨ †DÈüBÕ Bclj 4¨Dt¼á1€ˆ„Œˆ¤ ¥ÿ"½dj  /ÐA" ("NU¤§¿ÌÅ©ó÷-€Ì ‘––øPö€zÁÀ @„v…z`*‚Ap€) ƒ¢ýÿ‘‚GÎö”öõõy „^. ¼_Ú`EA½| À¯‘ èŸÑ„ˆ8f®0Ô_S¤3Úä` pŠ@aB¼¨S`ª­0ô„"þëýüÙ€ˆÈ¿Òý‰þ•†ø ƒ‘ž „? áp†Á¡C =!´ZB@~ApòÁà ' àwë €†²1„™ðÏ|(°ÌBÁà¿fþ•³Íêˆ*ÒÊ@£ˆ~õ§ó‚‚1ûî/üçpÝH_Dàß+gâük ˆ·§°9vߪ­öƒ1ýÛæEÄÒâ"è}Ôì*ü«€™¿'ô·ó·3Cp 'ÒàŒ s†b¾ˆQ (íå üOÇ?WD"" Œ8A]`¢gǘ¡Î­1çïóØ1ô}þug‡a‰€ûÿþûˆ…µMõ,tÍøÿŒü/§Š Ò((* ”–DDD$’’â€àæ1Áþôñ±Úg$@ú¯v1ûôwË>8ÀóG ¼€æ2@b˜ ðü›è÷€â@0æ"ò¦ûïÿËeù_‰þßixÃá¿ý<þ?È÷ÿƒÀ0×Q>£ÄC-¡IW y{ü·W ¨Aá‚a´ È]!àÝ¿ì0”Ì 1‚¡Á®±æ/»ù/½Áa¨ûõ„ÁDÿåÈ ìŽyŠ 0Ôüí‚b4ôϺê0òKl¢â—ÈŸsÖ˜•8 P£JÔï7™ÂB$ÀÌ pFzý:XL^a(úKP¿¿m“ áúmøG5°·—ù›˜Vþ^ÿÖ9ê-Î!Á²‘n/#;.j•}?ᯬvÅ&Y÷Lj£¹æŸºêdiNßWq„TÓ<5Z(šš bä;¸÷»÷:'l9]+¥Þ¿®r$X0ôíäµ ”‚dp™|»Nq˜lÌLæh‹kËj9wõP²GlóÅç¢ë.Ô¦ô.ÀPrFΖΈ~¬œ×µ‹ýÈšc=l}<ÒË6ÃÛLÛ|âû,á\¥#žþ›ÿºmBæð‡orúŸŠêöÖHTGQÑßÐaËI¤§NÎÑiFaq©ˆŸ©–§%±Ó{Dq-ã8J.Ÿ)hOónt1P »eø`´É»)>'Ÿ×³|Ìä°‘möM˜„®%%ÖU ö)‡ g ël8ã°F žß‹KÃÀ¯ïZú©?ƒ,-;·ÖÃ~×Oð BÌþó$Ý…ãã¬dQ»4y¸ÔàÇç*FpÏgËwWri*N*#m6·Uï‘;B_Ÿ÷Ã*­XS§[-o:†{¢ÌÔÓaIVY»};ÉÍÚâgo),øÔ%ÐuºóÈnÞļę“ü<\£ö.MY%é…IöD 1²3Šy3½M¬ ƒ›Ö2•CgÈI©ÜÊ™_¼«’}&Þ"Ÿ& |°4ytCÍx/‘¼ný–qÏ7<û$'¯#aQB{Ýü.WÇRnôÝ$XÓnÒÕ–ŠõtØ‘äÜr¾Êóª²÷òOøºyÚx˜o¥\c}Ò=²îð|”¹Óf )ãÕä^o'wÚ¦ŸVãåî•Ó°¦Ì {d1¼²)Q¼MõÃu¬¹íH¯ã´…ЫgÔ¹éô±ˆí¹ìÝ0Oû­FƒCÏï÷UÔ”dÜ ¥ÅÖ«õC¹¤q‰c,BÔH¾JQ’€&ÃEçBX®ÎMDpEÝw4…»¶Zâ(ê/5=Îz™>PµÕ1 ë €ÏqŠÃ5¤¾û‰½ÿ(le(ñÆ_Ù]wð`wÓÎò>£Z¸~+~Œõݕғ¨ŠBëÄÙÑB+#õ#½kÑuÑÖ[Õ­åH­´@"Z¿iúÛC;ÜÝÞôAíH’‹³KKVf“,õ'Ç%û™­‰3ا߹ž¬gÀY5~ÒÜ Ñ£À6qyÁ¢‘çô¥¤z"˜?N¢za()^êá!ŒdòqžEFð;OÐåèïî³ÖŸÃ™À|Ë1ìÕö!&UŸí*<¢6ÈßÂJ#u+ ‡¦Ø´oÅ¿œyù}“î« ÅôŒ¥lf÷è—ŒAo%ž;h¾ÑRª™[æÏrƒÖ¿~5‰}Ò(ƒã¤uHùáV1M£S´,•Ëzª×dëÙÞY,Oþ Qm¾a¬ºäÓ–·—¢ØSÿ„UöINüÈ{ÈõÒÊ®{ì•ßšÒ²h§Löñ|LTÓŠqsŒÕ\‰èIg”òiFrÈ:Ý)i;9Ã7•µ/Œì±+ê3}³¨J ÚCZî<às±¿ïI,qCa{¦ÃæFÚõκãåc(†‡ÄcÖ5ûÂ{>¯'l Z¿/°´èq(ífjED¥RÊ-q'è<Y ñIžàh`w5/ÕW<­ßU\Mõ䛋”ô!§•_2A¯k’¥*¤ˆÛ‰¥Åš}ª—rn‹0ø—DG´òF6T%g>Os’>¼©I\t™bðœêäÄy;0zÒžBÍõý©ÜFa`fæšJÚÈÎ\ðå«Å<”¨3·ê‰ÿòZ­Ãà‹™Jv`©Ô:ƒä}îúÏ7tc®îºÊÓîÿ¨Tš3¤”½‡ |0Bª?Z¦ýìŽý6“T’ð>Ží;6ü½óËæñ…­™{ÈöpûyŽf®øO'ÇvRð´ÄfT+Wdäkᤵ5{Þ,6³O}¡ ’ìÕªƒÅÉúUš°NSöÙÄ­´+o{,ÓX"eñãL yŠ¥BÄR¦Ù:aufbÝDûéór*;aü1ÁàÀ˜©!¥ü™tþGLY0Ò×å`и'bhi½aæãl`‰Ay8Ö¡+'ê[ÅöQ«u~Õ ˆ&|ãS•Å»ñÁˆnPy–Ýé–â¬1öþ±ºžšáJ.‘üÓ0Ƨǡßd{´^:É`c´Ïfìy~óuãy«—ÄyÇkÙâz›ô­î ŸiwbŠšF­OYµ¡ùu@ªý¾HΤ̑I¤]Õ‡l§MUEvÎð è‡b_¶­ºô1‰Ç#Å&F[Ÿ›[e~v¾åêLP¿³°U á®êýÔÍ(ØÚDüFK˜±Àù%!8z±›1~á=-±ÇÈÛ+†¾B=R©‰W§‹Á#'ÈÛ‹ØUqÙzZÅoÛtߟž4åñf|%¸ŸÇ?¿¶öOëk/ÎϾADå ?í(¨TO¤´À¿fä>Í™¨›<+G›– ‘A?ÔYQãRñDXG<ì;w7°l´~µ¯± ·¥\Ÿ¾í^¿ÔK°b²ÏónvÂ^t“ˆ­|u½çÙŽ?N¶ òˆ@μÙ+¿Koü©º:²À?—*(5ñ+å!ÿƒ¤¢|–¾'êà„·/qRôv煫ϘivÑ q®´ YQ‹Fª Û>›ìšÁÄ%{$ùyv"Ê´I¯âŸðmÖòl´ZÌ~Y‰Ó,«‚K†ë:3ZÞXöÊwØ—ÿ®ÉÈ]qw$ÊJPÂÓM×›VuH ü¾¾i1`Z¯×&2¨5VíËÀ]A²o«@õ}Ϧ8ÓË–åÁÕè*˜ú7«ô -ÊOZ_w¢á]uãZ×¶Xfa~¨qýBæ‡F±| Ï ÐòÄç’.,_÷wÑt,Z"¼’„e‰0öÇ“½‡á@æ…a •½аnJÊØ€“M©þ îbÈO7³¬Ça½ƒŸŸ®Òß/uQ¦O>I>\xÕ–uC:¯ý“YŒêrˆpúA[rF^)’™oÿ©tü€×Ĭö£¤[ù¾î•Ÿ[A›ÐMü± ~'‘Ú¹—_ˆ{µ³ájz‡Æ68baçMF‚äiÇq'·Ü¤uç >TpODø‚4>_2,žO]üÎSHô—"dBz j…Ç›.l“1|Ï‘mX3xnqo ¾‡íU#¥ûu}]><öÌá±§" š‹‹ÉïÙ­#Ö³ˆ}púæçÕ…Ém8hœÄŽóöž{‰cR{¹Ã ãfSÆ竳þ–aT ¶¸¿UD"ÓôØ Þ/Ÿ™ Í ö±JÎ "ºù…î••£qnB* ÀÚ ÍÌ«¬÷c›wAå–ÆÛœ‘3t:/[¬Š {ÄÐÚþÀ¾®çB¸3wbûmSï1G¨ÝQžâéY£ÁWYöµn9ÃçÐËp2ŽDÜ*¢˜Æq–Žà«aܳ’ùÚµ©0Ø‘%Ã7¶¬ÇìŒ=ö˜ºW:… ”â&ËÏHÝŒ¾É;ùN9Å¥·V—o'ÌJ·{É¢‰;`ÑædT™ùïMÄÁÙÄ­úY³Ž'½™IKzã+¤:»‡ÇÛöj°²kÛ’#”\îûѶ/·—Í£/ƒ²±Òïà·ˆÜuž2Û¹o|~5$ÿ3> ó¦GÜ0Ȩ •%ý¥”%!xãS*3¿‹§r¨@­Àkù ·JQq Õ¡pÉ쯳Ä)‡é5O˜ÈC„¶…5ʇZG€…éh“œÕ¶8l!v&_(±+}7©Qè3èÆœ‡çñN4²A©¶n-=ì§ÃÑŽòtˆXéš1õv· ‹ÅéŽ#iõÂ6š$7y¢GvŠ€Ê­Ü@_¼2q±ób—™îú»¹*™[Ù{Êe•”«÷_N±®¼ZžºÛHÇ]”4y òÂÈ™îíͪ9Óþ|‰Óõ<¦g^E¥¶É^û8~$îh¬ûþ˜ö´;Äï\“ãg>cdñ΄PpAëø­Ñ'Íe´ï'º4Æ2Ÿ€kë²’Ãåéª_;³ÑÞ`åé¬ÂÞôÅï‹5‘jãQZ\|”@néTê5àÒöxš÷ṂÛ4è—a¥q8 ©åOöi U­­‹\©·î´³Éxrþ9Þ$ ';ÅeýB%‡Øhƒ†â¾¸èKòwem»h^Zý ²&ÓÂÏ?­Ó áññ3g¹Êøì˜“¹¯ÀJXdktW\ÍCAr+ãýEOÏ»X¦ök)î,Vð?“V‡6É<ðçöØCÉešo‡I{²9ta—w¼ûºÁ]b­Ùp¸Š—¡@ŠÝ_6öÊÍ®q"f¥ S ¸¨¶*opñðF§‚„ùqà}Z'köE)¾­G]Ccîeþbȵ¸ ¬÷€Ð“X­õ’D5ßµÖ »¢PâNÆ$ê]ȳ@õêáâÞG¾a‹ô«™BÔ«›® 蜳www»»»5Ô¸G`ç–‚ËòvU\Ët¥ã‘“ïb¹gO=YáÆ5ÏR?gÆâ:­–Q {žÜh_S½—ÞæÉ‹[Í{†ÿ#Ç5‹¢·n–§õ2»¸ñ–¾~Qc}$Éý®¦šásÕ•ObXMz6¨z_3#ïÀdTGÛDí…QÞ#~ÁÜêòóGOë4¾š_±·ëŽGEñWvL[wA%©•Y8Á»{e¡k¢îÎ… ¤·Ž¤XnùNñÏêN÷iˆî’e`Žþ̲˜â|âãrýc»o2–ô²·)|X“’gàY­ÉâEª°¦ÜŒ-µ¢J2ZÕ–UÌg3+ŠÝjFÑì᜙Ûm¼ˆH‘Ÿ²Šûqë:E¼áU\¨W¨>ZÁ_¾&Šo=ÌI§ë=I'ºŸQÙ«®ÎÝtÑ_’vurãÞéùBþ“^önDQ*—$M†}æ­ «ër÷ÝÉÔcÙfo^öízÙË÷¦ié=>#GW_UÔ+vëD´ §h°K˜ Õ6ñ±OùßëÏDéÙ‡g*§äwþ ¶—÷#ü:v«ól£¾W†„‚å…¢wGBÄ)Ž -ÖFÊëù«(Š›«ª_]1KÆÕ›£Â³^Ì•øo~îK%0ËW¿ÒôrY3Çï#åHŒ~ÏT›ØØGø íƒfÅÆ‚TÞÓ’‚|}ŸO+*`þõn~Eâ!ñ’.¸ô©U«‘Â$Âåô¦¶Æ¦ŒbúÉB¾©¹á8x€ÔMTÕöøc¥¡¤B˜»å¥{qay'öˆU wÄËæš2ê9óÒ—óKRzHˆÛjžTŒ•[bõÞˆvŽæíÒŸù†øÐŽo‰X38^­8† JS ÷Ò¯‡†æ).¼Ú™®m¼ÁB¾çºcWâtÔ}óz»}§ÒaGTnêb,}€—|ÍÔSQk;‘SC¯Sð£ÜP©ˆS?Y;|y›]Ò¸àƒ5{¡UØi}ª÷XßBƒz(þsœß]û“¨¥´‚szpy3€|ò¢¯éT ÝTù³­À­"ª¤7ˆ½´áóéAÒQþà-õŒ^œk>v‚5%u=ïR\ÒzåGêέ”{XU~ãA§¨”ß~±Vžœ†.ÅúFôÞØ¾ké­V‰Iº‡XËS®¦‚–6”‰¤8ã:tÜ͵çÃòeï} >åÖƒà2±†â+F‘¾½“±êÀ86Ýe±ØÉvûOSß\îÿÖ9«ðÈz²ËÿvÏ e»k¢ögUGvÃÖãn~û²ëH9LXê™’زR¦-A«š®{­Š#ì[›ëq› òý°é[ŽÆßY¦TõN O’[hü2|o~ì*a~¨Ñ²œÇEò€=rC=Ua,*¨IÖ—¬ŸØç;çë»3Û}ð¾Ýa8;Ž]ó©9ƒÛã•JüHÿ¸#´ß¬Œ7Ä8™ÆÛÆßáöK3{jÅs'þÍ׆Qv ð¿Ü¾ÇëV/UÉ»ÕtY è_G;gó¸(ùÚ9—XdŽôØî„<ØÑø¶ÍbO¦,æSuspÍ0Ûgº†©Iô†1QÀå'³–åËàâ‡ÛNwβoØføO¤ÌràBEª–ÜgÅŸBL”÷yú*&Éãù[*tÅl(\&×lú+}îÿÙj¾zIøû•B¯–ì 80ýHÎ_ÅI²ÎÆå—Øv„§Týö0PR€»Ôé½±s«g û3{FÈ9·÷Áp5›Â’Øw`ÃcÚÞŽçö³/žÐñÎf 6&¶ÖÎ]Š’›”õ4ù½ÙÚ%d1î'<õUq™L^ë¸6½nÏËfŸ¯€g;ȶÖehûÏÞSŸÇ{=²ëéUæ®Oܬ„¯ÔåzõL,-Þ;‹6=ÿÜÇɶϻ%ìi2x±¼øª‚N´Ñ›(Cš"~Áß·X‹*µ9æf ¼]×Zú5ãã¦SŒñK†Ó£ZS8e¾[ÿ ‰ž!€À‡‹|9tí§•nÀ=ƒÛq‘›Wëç4ê;ëP Ñi y}Z$ïmÁ0ð ÅÇ"™ióEÑ©…!‘˜ù7©ìdÝÆ–mÏ" ¯¿N%ßå3 øÞ&n9q?©´æºZy¿°0A•¸·#¿+IùÄš.³áìâÍÑŽ€²8bX{E#.M8Gñj4.s•Ä„j0àÛ|iÖV˜’Nú9Ö¤(oÆ2Íð‘}ËcÀRårã™Wű䃺oƒÇU@m97ûvCYÏ–јÿ&ªÕ GþíEKE$.D6´òSWÖ›Jå\í^GwŠº‹S„¿¯_6ýAD‡xwßã’Á·Sp*œZÿܗĦ”xô6ß¶S–ÒÄËéXGK2ÔÓ7p[²/HWÀF‚õMx'ª–†µWÓØ®nŽŸ°2ò^·¿<½÷z7ŸX´äƒ¹·R’ oø01·ï]Ȧ-àÁúªºð9—&‰Ìµð’^[ºƒmÞ„‚rPñÏ#¹š¥¿*ˆoáäð+w~0ÏM"NP6]7Ê“zIyu3ŽÄ0â{]OnU0Ð;üÛ,nb‹ ˆ´¡Gè˜7A«¤ÑJ°«‹ÜmÞ×$岟bd¯mk¤H_ÙÀU”žz¨D Ó‘eí )¦‹µÜÂÕ]1«~ ØæûÓõúxrŽÎ–§÷}Z~ü­&")%›æ\5ïY´Å™°L 쎒—9î¿Öµ/ð£z!¡‹—— y+¡t°ßjn¾S©³.Ù36Sv³^ýæ¸IyÞ±¸–áàVû ƒÿ¢t‹& endstream endobj 420 0 obj << /Length1 1306 /Length2 1243 /Length3 0 /Length 2081 /Filter /FlateDecode >> stream xÚS TSga,LuÄZ”¢­”Å• KDÃvÄ"*SÉ y$y/ËKBŒ  rTÄePäô¸ EA, ‚ ¨Œ"*¥(XAD‹ è([E˜Â¼\p朙“s^þÿÞï»ÿ]¾kóMh˜#G€ÅÂ\ Åéšó ¦ÓƤÐh ’M8‚Kà÷v’ÍX¡D0Ôí„—†pÂæ áz †‚•Й€îìF_æF£æúˆ)Ü€7¤F ˜0V’l¼0™Vĉp7ðáìøö€î꺌l ŽV |Á.‚¥Ä‹|HÂ0>ãÚ)!ìØ"—¹Q©†I•LçaO¬„jXô%ƒH O–F!Ù€p¢œp„aB\)`@$F•E… ` ^aþA`• F'ÀA2˜l SèÂM²õÔ@†ø|L*ƒP-‚Æ!"Á*nOÀÉBz $QbRCˆŠ%†Ô!Àå¬Qád}J¾‘áJŠ‘èk¤êÃmöA^˜T £¸’¤ÏÏQÀ|¢ïZêäpÅ(¦AuïoBõeT2jŠÈU°¿÷$†0‘>Úâ`°hLº« Àr'ðETýáZlpÒõf¢†D “!Qœˆaâ¤SBjà œ¨ûÔ1õF¢Óáã ŽCPÒÇè„N܉ù+°žFÈhú߇S4¡0†J´á†S9þ^œÈÈ¥“%pzzb @çÈbG'¡S¦¸‡Ä©qB!d2O¸þ¨Ë&Ò%úô>eõ¤ì&ÄL‚Ê…ÝG¡o ±h|âCÿ¿ån ü7•ë£üO¡žW%‘üv€ÿðCRD¢@ø¨$°âs@$<±°Á°QI?÷úã±4Nò¡}ˆ’‹$À‚Pç‹&db°Ã„ú§r}P>&Я ƒå …Ò’h„ÄÀttbŸp‚A†€JA1œ ™ OBLAÒÄ•¨ëô&Ò”°|•BAl‡arÄ›ïï†U„á˜Ojùã»§Æ—¤V ÿıÒ8>«g8™×ôï4ìô™¯~¾:Å‹ýn€y<½™sµ©+ýÝoszùãeâµóhâ¿=Ù”î6¯å\ÅtalySÜå#½Ê £+ðÊ•u1LT7ïu9¯V3¸²Ñþ+²¼ïÙýÜn_öwåEoψ^›Ø^xI13ªÏH7±tqaš¥Vrr+‹<‹9MUþK”ý+ë_eZs»ße߸Ã`=­yxš< i϶êé1—æöxzQí¼ 0¦4ÚtVûXŽîµK¬HM¶‹UÖ…-÷ý§¼ôÊ‹´¨î4&Ë;b[òÆ,SN E˜Ÿ Y²|žSÞ(¶uj6i]»9>óôƒ{sëÎÕop2;õÈ7&Ký`÷f /,•"~àE/‹Í>\xX”¿¯”;þEyôÆRÓlJ:Ë4´˜ÂeûÔ-`´Äïlo¸5,´ÞÀõÍ>î‹¶GJᓱäÆÎÈÆ´ ×¬ÖüïŒIÕb¿–-ç´;ª*Oµ_ºÙrýVæÂb[nݼTÜþï]«’ü>ù=2ÆÇæ_Þÿƒ¤)«ŽHv<á\ÿò˜¼–žt¬y<…kÉË*h„Šw]¬]p$ûBk´°»Üô<%iÝ¢¡´gC›~ ¿íµ¥¦-ïÍBVG™§íѸQF׺âEÕϸ6ºå.Çzv²ræVãŸLÙ쬒a¿]¹ê# /ïfÊEØ V¥(k,º­ä‡óª{æË™¡¹Æî#Cg/ö?yùz|LÑλm1æ‰ý<îŽÕþóñ«˜¬Û9gùÏͨi]ãÃs€ŒwÍ¢zÛmö½m¯ª:~Zcþ(Øš·Ó×2cˆÝÕ3Ë\°×ïÀ@ÑÓ®¯/UñcIx‘íž¹ËÜ)™Æ©½¼›'_´JiFíuíý§ E3®~›³ÃoZß=†ÏôÅoy3«êûštSøË_B3×ñÓö.à;”Zï¨èÓLsŽ*ú>Ô1éÁ¦WZ²çµ6qfgùz#Þ ‹ýNâæ8»öÏÝ•œd­i“vçy§DÙ3“8øšC‡pᆨù‡ ˜Ñ+ê¤å/;ÝK”º¤®”íWÊÇ[ÞäXPF÷-ι^'¦&Üóiÿ2`ì_¿>Œ¨aDžöe–ì½P870¢·|Ú~ÏCE«¾¼þ¬öKqø/¤"+—c[“eÈ“ŸuR¤ ËA³4Í¹ßÆþÍáÖŸ[ š·h[O¢Çî•ß<8¤®ïá=£Ü–Œ%ž:¸í[yîÑ3.iŒmÏçì¸íÐZöF…5Ù•†—úvK6†hä}=‡³è‹¾½¶üƸ¶¯íx~Ð6iúÜwI®®(åºVY(Kf±'í õÈPi‹ .M¯ÆYƒãw¾Ûµ#:ÚÌv¦ØÈ!/¾&B¸¹§¿®\Ü×y½fne’{ÂöÆ”Á¦”ŸÝ•G½ç§¶¾ÈV¯¼X'+.®mÝxûÌ«· ç‡ó ²V¤Tôûä^\Ý]z–}®­uMÞíe!9…šW%¡Ö—†}aýWdóËY{š]Þ^:vè«Xläî°Ï,]j^oˆelu¥]!Iû£l…o†•IûÍ=ó£šOo´æ˜­Í_oÝÕë·ÅÏi9eºõXW$°Žaº‚¼ŽþG¤ô=d_òÈ*ÎÃÇUû8ü~|óÀõ;¥´}‹œBTŒ’µAÂQ“ŒlòÖãÿ’Ñ%å endstream endobj 422 0 obj << /Length1 737 /Length2 17032 /Length3 0 /Length 17560 /Filter /FlateDecode >> stream xÚl¹cp.ÌÒ.Û¶mÛ¶mݱm­Ø¶mÛY±m¬+¶“ïÙ{Ÿ÷=µO}5š3ÝWwM ȉ%ì]Õ¼ÌôÌ LÅíÝ@Ay|Å[ÈœåOÙj>õ¨ø'~¶ªn¿È£½9÷ÿYMM=J§¨@×YJý]™Eq˜`!Ø#Ÿ1»}ž¼MÙW9§-!ŸIî­‰uMüJ«“ùDÃm ’ê莨äÅkçó¢wl~Û?ä"*®[f E ö`[fùAö§pr¢gaÐãg2Ip•¬ï@„ŒCãÁL°öñ–‚‰K7€YƒîîVöƒTJÉqQ+Ö¬–¸!avAáä5Žƒ¿jæM`äŒ~ôëÈRŠð´•i‘žçUG£5)Døî™é[¥Z^ØåƒUÃɼÂëj„·ùÍ|š%eÐ })CšSgð'–ïܱ]'wß½/ÓÂЂ`«óÊf6LÖ9!£w¦*'*•ÈUÅ <ó`ÜçúØ/7Öõ™,Þõ<[¼yíÕËáíb(ºK¬r…™op÷à–È£%Ïò£¸B†9Œ#üõÏ À&/x)ÓƒØÙÁ®Xç’‚Iâs Ö…%àÝÒDýºõúó~Ó‘¿Ê~œÁí"9“°»¡Ü¿’6ZjNxÀŽÃW€¶a¹v]¼Ì.Á™n,ÊáŸæ y¤z¹÷Õ &ͬN¬¨¿JOI\+DiX>w·‚óL‹g%°ààe*<å÷á;c%–Öo‘™Zl×@ë"Ò§åß2…»Ë *ŒÖ·ÅÊТ ×)Ñ Ž¤ºÞHÙ¢sk;;é³GËâR¸‰ t:¥¤#—ÅF´ƒf$²‡¾[ý1üãø‡è_9LŒaœ3x¼—™s´ÑÛ‹Q£u¸{?þøÙôèªVúk-#Né(¢ÏIº‘~;k„êºa›àd4Ðê–Ÿ–ø•SÎâgóžBØŒÿ²Õ”ƒƒTõ<%ÚÕjØÅƘ„VBä8@»»‹Q­²¼Ep¾e }åýÝØ"ÒTËVßl]#G.#—kˆ£\jkÚD@O1bY`¸‹zíã?F›tp ) â’$Ò’Eòœ)$Cåù ŸÐ‘}®+°a*©ÕËP1‰µµ5"ïØ,ë´OÇÍo3dÑuó>ǧ^4AS(ÌÉ0A‡×!š(b¢.ŒkLj¹¯ô¹“ÙÖ!ëãÄkºÍ·ZÝý@çÕ|þ·2ÒO_ã—J°Y#¾1YqËöÞ«:˜nòy-™¹\öjŸO'¬'mb2‡gÔ!rÖãn¯fݶãà@Öj\_b)ÓÅ;î/‚4Ò$+A²¶ õjKÄ·E¸³fOðÞ@ˆ+½¾”¼ŸÑdtÆ3RÞÎŒ¼W;=$Ñ©‡£ñî)ªù¹=JJßÞ‚ë3׎(©=‚¹¤4 8{»°«Ý°^ðt{̃-`4 „"}NÜ+މâ`óFÁˆPt²óÉ„Oͬ+ž† Kåæ~æzB, ûºWa²ä½™æ`ÓH[#™V°Œ•Â6$ –ã`{ýæ¤xÚyt­QGšÙàUWg5¥Ž,<ÃNpýlGÁñ‡.3kZÒ®kÀ<Àèq?\Lj¥¨§Ù´7}jÀ\ìu ã¿ãNaÁD 6¼O):B„ÌM)xæÃØoÞl½:ñF’?õr¢+雪ÅSq©¾É$éiôlz÷Ф/¼²’×ë0B±‚~N)è“q»šª¨y1|Ä å˜ç«T¨øÚÞS,o ÈÇwAùvð€ÓÉi9û‚½)g%e·=wî†QõïM3šûh?´«2GÈLJjƒš($†žÄÏ?¿(½¶Êt+:“GѺPj¡Ó£Ç™z©ŠØsE J0Ê&MáîóièÜžCò2]äšJê.|öÃH‡øvù%™ŠG:ñH»9ÿá² c¤Öõãx…'¡«‡]+©Idry ÷´C<íæ³…¡Û«ø1÷1°ÚÍ\NÇÀwß»ü«• >é KýHRsSzE2cO5ǵä.ŽX/]¥¢fÄÑTÇ .&¼[(?Rÿ@`]ñ)}pb´ãløL'õþ•…°ýÔhG­ƒ’áèÅøPÔÐÃ×ÝÛÞB $MiZ½£‰¬oF§î:SâÄ!:Òÿ.Ô̱«8Š Ì(ðB£}÷&|ÃHzÑšlÓ'LæÓ> La¿Ø }'êqÂ}¡Ó¡¥‰ífÏHö ûdu¥&`*…„ÚØ,‹–gâDO/£í_…öŽôD’}/b\jDÝžC¸¥(¹öcL6 Âk Ø^…ko´„dÚY”Èã"9=vµö‰]PŒ’¾…ÎMÕÚä\*«”‹ožØ³¬ÿ·Ðmü)’¡öJX—®² ù¹,#Ðjæ–IP1IdŒj"3y9/ý Y³‚‘3J¡™C` ÚÓ€#W¥SAm>ë3ù8X}'b2­hÝ× ±g7‚o/pžhÕìD䕨ã–0q8Ž1ÙäAÙ>Z÷[žWî—æg1äI¤E8\Y©¿R,šõo òPç_›¸×Ó„ñ©„œ ²u"lE!äkpÍP‘©&bÖ·F„'HÌ, øØ$`åKÓ• …‘81goúÉÁ9Û–6 Ñ#,\ÀŸ¾_àŠ„çgn„XêÝPJTN§ù׿ùæ'>“¦¡ ±Ÿ5:JGŠº]g¬Γ— â½²bLNç¦r¯Ÿâ¤·ŸÜˆ—°#wŽ<öÃŒÁû`¿ê“7¦HÄéAâÇýØ-SzÅþþ…ª7˜ÕÆrÐÒÖ6(éØa ÍaLœRºÚC›¶¸ÕY¿H•¥òõ¨L=4¸“)ãEq‘–sï>©0ô-ú» ÕÅQt"—üix)²QÍyAη!Ìôò±6¤³Ò‡}þ·ç—Ž!æ>É–zÄšRL0-Ìèl¼)$Ð?ê–Ï9{Ó)|cHؘëÌç×êâm0^9 ôZÅÌ­Úfë>XºÉ¹Ê@tXÖ=ûžðN¯²üÒ¦õc{FR:Oê¤5;þµ¥ÑÇy#_”ù^͹‰D|($°êðóvëN|yPX?ì`Œ„.BÅ%®,&S‹õiùÛÿiGÎ/ƃ׫¢o‹‹]¶õˆƒó{Qõ¨@üu^wòN4ÐïÞÝÛæ/ö[íAõêè˜áùÌÊ%)’­™Wô¿¨uæÍoDgPj,èì¦é­&­¡Ð[¨µ ùåÚO+¨º[¹†<æO.wSÓSákÞµë2ËEOm3­¯ÏãÖiÑ‚îQ>Þº„þÓ©ysðõÞ–êÞg ÏëqeЉƒŸ=ïÔÂ`gAËÿѺRyädÀí%•L )¼ó3E®mú'NÄ~æ;º¨«2ôU"»ç=y)÷Øow‘iU …%…7zàzye·ç u„9)™ìNt'²?4ð_QH%’yíÕ¯ðñaÉ’H ?ëÙù#­²vNò¡HŽ¥ÜÂâÓmïa<)Ý;]ãkÜÇÜãñ,ñÅÒ÷=?æ]¹Ü¢ÿô:/ᯂQ¹¯I¹¬é “áÅÅs*BŒý"Ëný ü!#ÝDаÿ‰UóZÌZnÚ KÒTˆ|jrO³ò·få_’ΜÄöS’Fö\äqO0Wø°Ä¢Ÿ-1Ð*$T@0EÝÃØ%òd•†¼y5ò}…%]êÄè¯ÄÝAöFÈ‚šHË5¶¦9Í¥Óë‡HGfe~ ÊãÛ¿âñz+Ye­«6ÚÛ½‡ÎÊš¹“á¯$3ÕHm€ ƶZ˜#((ßêü)óggød|Ю¡§ñ$û‰§Üt.wãÑÌWúY$mMP¨[`g$PÙ, ˆí°Ã¾Ü¯¹Ý‡EÎÊù…Õ5ÛüqËÉð­à§ÛÈL3ž±¯’Ú„³3“!’°¨¿n€õˆ¬ñ^oëS<$¼‡›4.ùRF_ÞéaêA©ýH†r"VÒ`›ôlK ð®nÒ—‹—Ï[Gi˜—n¶É͹Ek£×æ¡›­F*‚Ñän6=Çå­'ºüÌø–ÖÝ'Kð dþŒÛB¯ Á^µœ8~dÁ© x{ÝD£sú °v¬ºè€é³ú†þ8E$æz#ÁîLÝ4Öý;ø™àxˬÀh„—EJ¨WÁŽrïù™ZVYèfÞ;?H°þš ÛV§UíÏ'RñÆíÙÝÛzá¦|4Zg[ÈSZÇí&[{xqÌ¢ÌvÙá¼1ßãô΃È~HÏoðoNæ+'k²¹&ÂËøÇ OY¡ä…¶øxÕ¡°RV´³eZѽqþÏž¼¡gl(OL¢óÜM5EF'Y}DÏÑ„Œ¦€w!K]:¤Ç_?ýb‡feGS‰©iC…`½ÐäëŸòkÒ¬Õ¯åBsúù¹èeõ÷GK?¹{˜ÅäZ£ÚÉÄRù[ÈÌ~¼ŒUÁÊ Û‡7·¤&¤^»Hlf%ZFZËÌýX»±U‡sþ#¡Sðk}%鳞…oœëŒÚ“«BX¸îKt=ìÌGqÍM{%?¨êúïà¶ZF‰²d±¢l¹€l5Q½Âw~ç ΚAL{îÊÔ¿LÅZGNg®`>øŸ‚ÍGü‡gèR¾iUZCWnò”iŸ> . Ým#(óhð†ò£t&BXh™¿õCŸÔxñ»‹w»nxp–Í̆ÓËÒè¾—…O4‰B&QÚ– bÎrYPÆ„AÑ «@u|¨iË®ÜÅ'a­+S«·à·rûSL»PÔøÈì»Êç“óecÀ“èªÑ¤Ö~øV!¹[]—;œ?dÀºñõùߥu±¯Þ‹°û¶çs$lñ¹8Ô”?÷‹ï8X[¤‡ú4eãoµ€jî‚'Ÿ™' …ÑE.wBdúi&ïR\, ¦Ë”_:sT\&P{"Ãñ3Áçö– µQ8@7•ÖDšwØ„·¹ñI‰Ø ¡e.iHÅUõíñQµIÐ}ŸÉôi£FøŒf ñ$Ÿå:B|NtÚ%³¬§5¥UÆ#`ÚÐ ?oŽÝñÂÉ%ïŸõ7òh› ÛÃE¡×¨ÌìE("º¿Ý£ÄÀíC R‚n†eéÉ&(â= 1=ƒ Ø×i8ÄÖ"¹#À¿ÝË]@ ¾Û-@%Î;5R<Àl/g´énû]%}•Y À£i”}ºL&u^M‚ý•­¹~‰úpp—»¢ñ]Ä9ûé±»…ZKt{í¥•¼dycLüVfOÝQ@+IOjPÅ…1rJ/B±áª»Z!Él®Å/ÝqÉXa™¢Å= ä‹ÑL!Ü™³ síË Á»„•Š}LúEP2˜J¨®}{EªSNî 9 ÙÑ" óŽ“øŽßsßÑóÒwðŽkò‡MèÍ }'û×Ítã±Þœ³R)÷Á9ë³cåª0¸¬1c aß?8_ý50Zã5´ÈGÕ÷ž¦Õ˜TBTq²#6ù0𱩾ŸÂ  ­ôóQ8—|x9h«”§DêÃr³ÔÞI'©yó""”žÆ· ìh9Y‡£4\Ô+µ.5@\ã -5|¡9e¯4œ2M¶i+› Nea€ÿˆCô–+âË6§ð L?p¢ùèó-Òy€Ó1¤NG‡>Bd?ŠÌ¥¯xÿ 7•ùE hSs˜æµ…m-(Ð|ˆeo\ÎZ¡¤¾”ßS€Æ®æá–pW;\x©< ¢æbÎê<”J¶ëŒÕÁ8tü‰S×OcìùجüÖ\‹Æö;9E½üg’A¹³™Ë¼šX)(š#)$ñt/Cq‰mþ»Ù(ð¸1bays(þBU©íðMÈÇ&õ“AŒâwk&++‰Øú|ìv,ÖIJöÄ^Öר£ãQ,QkÌ,@J1*OW=f^!†ﵓ›t_¶®ÖÍà¥LÊ(Áç’Ø³š  ìÝŽÉQÕ a¾ö7/Zå½=…*ô+KœäNÕqR‹k¯gî]âµãÌ£0voËõôÆ$iÖÐSÛ££ƒ·×ÊfÆ+/Íž€ÇßrkŒÙ ƒ6',¦VÈDU'áÕª¨{U‰Ö'sý¸\-J§æöevÿTÂù‘આ4Ï—äNÓN¦s·\­p£ÉrJ_ëœÝJÔ»diæM¯sʯ¤íÊßÓapƒxVÔ‚ |Neq ­ÇÓALÙ‹ô.^šV-=^x»9Ž.þä&¶Ú»¿%™¸\€èüe°™²¥UtäxÍäztF!RÍ7 Ì[ñ¨€²ñ ¸„°~¯Xs'\÷ÈùZœ.n³¾¤íÃI¸æ 8°»5„ XéDÆÒÁÞË$¢[—!šÌÂûÏœÜI8ÓèÙ²òÁïäþiw$OS̘7¡yWGžëº S­ªktç‘t1–[>®o£R^ ö«tœ}¡LJÏÇŠw¿½§N72Z°“¸w¶&‘ÝzEEQ¬ÔŸÔF IW{×òNØPç|ÄI.Û7 ™q«Í‚  »ÍžÕ-¬Ï(ãÑaâ ±åâÁËš‚R•/\™ì-}ø0‚ÒHûûþÉç©"Aøˆ Þ§-î é¶ÞoÊ —~ŠwÂ4ŽÊÚÙ‰Kâ 0YËù{isïÔrÄ5O&a€¤‡ü5ïGzpÞ=›/Îu_lÛ½½Ä#φ†+KÀ ÕÐÔpvVkÂRG´úq¬Ï¸ Qwäš(6‹öKOÌ öÇžŒÅEãj⣭淋&«)çPDNip¯7t'„`û–ÓÈU'B¾½%ÑK7 ‡ÏS©M™'¢H#d8®0Ùò©[ÇZ<~Ù¶a‡›£TçÏë†3Ä£ó[ð“<îŠM]OTæñþ£ñ³†Å“…|Ð+£¨Â†”.ç¥sÌî³¹É%dT`ªö¦cG÷UäUg|ãì !@»ˆvz/abf3Qý7€ï0N¦èåm‡qŽ ³äxRÄ­{ åB:iɰüÆHÉí5+™fáêTœå„FXŠìt¥µ!+”ý+€ÎQÓ¤£æŽKþüCþ/IVL'¶‡¼®ø:LF°gLK×ëÄõ©'2&.3ÝPöNºÑJü„å EnáòhozÝûdÊa8û­kÕÏ'ØD™ºEÍùb“R…€ ›Ç;ë'^³Nænµ!™BÎ'mXSFA“A“P±Ûc\yT7{ع+¬—ÆäWðH^Ì[ßMcyô 9dÀÔMc±gú"TðóÌsCó›#Pâ[FýqÏ­Š]µ2dê`œ¯‡¬Mý&;wbtži¤kfÙÜ,Ï€TÆW îiMÀÀu.J…8—ÚEqo¸ï"µ¿á •›ýZÞ2¼ÝÁ¹ÙûZCl÷n¡cp 'ȪŠ@¦üµ²BˆÞÖ“áA·6Vဳ³'Zs²‡îè™åm̈Òe¡.&m KRˆÕÅF&aGN:h.="ކÕÉ ‡îx À"OWìƒÃ¡uºû#>dsÈ-šI[ké`ÿŒ`nS`Žzúýf™Ìpùê#<º|+èÁóØ"ÃU‚7¯mËCmøí Ñ)Ê\ª”{7=·ñ(çajÔ§O1€-î%‘ëŸ(»aÞⵯÒâ³k­TðX#{fV`‡žaÒP÷±ðǰ©gþžb5V7ÊæÍÊNª9-¨`¹þ¡–Vè,yb cRÂ;”rõs0 ¾JOR\gÑ®øWƒù¹ÕÀü™áùixßýÅcÐð!Á™¬Î<‹5–_óûï¹!>ož'þ_ÓUZZV3ÆTå$Tj‘ÚSlLÙxBÛ|é‚<×óìn-âCrÊúëMô x éP›–Xù€”Ç–œj[’ÏÜ*ä9(³6¦Î«´N´kÖ-Ôû«‹’ÏO…ÚkÑGèï”G”Fbîf}¸gõëj+.¼l†%'¶áÛ¸¾ÀàæÊ` ²JF¼Ü*ÀÈûÿyìÒ‹Reá^Õ‹2ºÛøZgó'µØý!ˆ[–»ÏUSI÷wÚâ›¶ògœ£©q@",s³ðfUV ¯¬NuŒQ™Aöo[Éñis'·YžÍæ¢>­ÀK5Ê€#iêcú ü7è5¬ÞûV&¼Š”[hµúÄþAè÷µM«·2ˆ–c•$(Á¦'4„×®.9®¶8¶~–Õ—4C5 Bæ¡‹»ÿ!dÀësªxÓȉ`íàÒˆ~‡½:|cƒ(k~Öƒ’aÓìíó »p@=hRú-·˜=u·ÉÙÜýÿÆJ]‚Êò£2B%ZOÞj_&Øðb–k1ÍÜ„PÆœ_"^F‘«¤®h‡E ¶—5Ø9k\ì­K<Ç[ËO^Þm7>[ÒÃ%ý¸­`ñf+Iö4[u†”î°ðsUïò§ñäÉÿÖ%º 2Ð4ŸùœÞƒ¦G?˜\X¨éwÙØÿ£­âÙ¯l.|“)¸Z`‘ɶÅ$Èð§øŒº “ ˜`ð‡s¸NåÙ›Ù¨²—; hž§'‚õÇ‘µ4¢Üs`‘àäùñÑú'ö¼ø©u]€’Qq¶÷÷IZĆœ M£;Ç¥±R£5(ë¯bhˆìÝ'krg†Ô7“MÏi4–5x4L5‚2Ô„DNŽI›(êÞ{SM8z3·Cž`¶V^_½MyiW†ù8 Uöïèê€ ›‰´f‹n¯“ Ž?ÃIî6ò BXÛ¾—Üs#†aÌÁgBâ…&pqËö(üpQT7”XEب`3Ýrs?Ò)z­ ýÃT»Gݘdss†SDK¶ý3Zh)§cô ¬êØÈθۆ¥’4ªÿ½Ãœ'úö%¤BÌX\‰«>þ •ÞÆ¶aÈÄ8^y—è«ÐÕá™LŸ Ѱ¿ÑÅ{=(Àµ÷Üu‡@¹¤áoèÝÓM´ñTPã{áDSOg“@Q«&Ô-ÑÔ䯫ºœ•%ñÚâ‹­•ˆAÏê_Ä?x·»Ÿè][ä3a:s7ðÓ£T™’;[­®rl#q¯ìÝyIÏ â˜Wu‘ÙªÂE<‹ÈÖÂIeµTží‘ŒÞ@ß¹?1» ¿jÆUP?KQL-ÎE5Mó÷yŠþÄø»x‹¶^àqqBòûÔYø">‡s˦3FU°jÑË$!å{&!ºwšþû.vc­§’ ¥y޽š„ÞB ŒYIw¨¥~|z¢A£0("á¶#f¦S 4cìƒ_žñSÙd LÂÊ{ÙôD£Õge ×+w½x¶¶.X°Fipþùæ¡¶*ZqEv ãüþAî^€ðéܶñðtŸa‰bÆT”P{ü-_ß‚b8Ì}¦ˆÄÒM«ÀVª‘O€j#>·#³„g)e&UpÐï<Oì-#Oã)oå³<ÒÍ!‹±Áz;(±Z”Æo3„‘jþ~LZ™¨‘]M~ ²Ù£%Áw.8‘“Dzrƒ±Q/7þMD¦1Ÿ}%ÿ¥Ô?l‰m–FäV]£LbµÍ»Tc3/["d¢oÇ„.õ›]‰èw'ªXÆWü8èiÝÖB<:ßÈTUζêÛhÉ]`J—àJ< jì%ië1z㦠–ÄÄŽ2<ìùæeMðÇÆP’ô"_¹—`ÌE˜û“SQQ“5Ý›Ho|ã1a©¬:eò£R4?£˜.öuQ™ù. C]°°øt͇˜;”ü*KJ[ÖK’ø*N´!ö^ Ñ4ö1ëc·] ù”&ß÷¨_ùM| TžH¯Î‘´F [,‘ÃÍLVEá”Ò×8ý?g¸xÇ ¹>ZÒPp޳#/ƒ°ìl×g“—Ý|q°;_Áƒ¦ÁnâN}œsVÆ‚…ed´]Éú„Ó4+ÓJWSĀʫ}Kßbsµ ÕpTíÚÜ-ŒÉ“V9J›Ò9. ´BýÃWÝ?ÙS™© »qKÐrCX¬=gIeÈÆ&ñ¥óã˜ry‹“J³7µë“^dD¹1q—Zú+®Âñqœc,}”À°/zÑÝÉfÐNO3ÓäÒ&£S-‘z[Zµf›‘•7­U+äßDïCÏ.Â0µ@²\ìÃJ8ösl|K+×9=;ÈtÊíh)p®‹àG%+Ùܰ¯Ääι(4_pÉfTjqñ#éÂ/÷‰_üwm @¥0ä™èÞ:~ù9²T™!<êv£»9bxú¡}®ÑŽHŸ,Gp.;µä4q7öËÉ˧Wÿ̯pÁùÔO„!£ð†2±+ºÁMìj-ÞÜÄñ…r©2÷ qÞ´® †I•ä"kþŸ;_%¡IùloÃØŽ3¢´æÅ¸ ,ktÜ¥¦¥ÍJCصAäõ=Iò–iªñjŒíAWIPdyå«_XLS*¯Zh÷æ¼é¨f̳ ǵ̨¡ ÍÊ䜔 A¿#;³ÌŠéºÆbqÕJJ¥™OyÛ^öŠ/­­Úùʬ$à;=ÞlY²ã~¾•‚1ËN«‡o™®9Ú‚¤êÀlȰÙû»K,æ#o_j4¦ÀΪ+|¼iô÷äI;¶Y¡ öL÷ò0!UŸbaÅ%Á° íup1YÆÓçù€íêÍÀ'žüw˜vlgÿxyS<ímæ§RkПü÷ͪ¼Ô þÃ=ø½.ºž3ìûnb]1bZ£‰ Ó–p…怒@}Ù-–h}T&{ƒm8„þ߉iX¤œ{väþžœê¬©ðÆq„“¨7¨Ü¿5{›Û* µSH/wÌίؒ®¾=þö‹®††TT¿Ö!µx6˜ê¥=)@±= à8©S#ïeaôò-ùº’Àõ³Êî6ºT5»Kb˜oÀüyµ=ùÏÀ’ÃdÓ4˜˜n¡úðrÍø™ÂF×èwí)ޱ ¶^Æ5)¹RΞ2t(·ÔN3RmwOÂæ½k`O¸ƒž©h-Aï¥Î› ötøãëR@—+k¤ µC”7({B©Tî§ŽX%:”ƒ9PupPVûˇ+øDU‡En7@Ó^F§ 4>haÈoCÀ;¤BGÍ£Üï˜+ík“â.‡˜\˜²Øöä8ÚÔ0¶YyÈ]àºzÅoVQwäéêKa6“³§ÎÄY¶Ñx'f[Š¢Êk’àˆê#‚Þ'æÅÀËþÝ¨ã¹Ø8¦YÛ#>¿‰¸änp¸Ô´ÖYô÷(öãgçpi¯#©õ¥àª›O¡ W[Ù Î{ÝßwŸ ¡ ‰Œò\§.c‘!-€;(õœàøß›l„ £ê)Ÿ.,sƒšH4ùy;´·dWv¨¥0ù„·âO ËüLcy,ØŸ&ªBF¤" ½WÝOµE½óZ¬k¼³±¢q”¿  _µðÉ«`]Ò`¸´Áî;ø±ïà ù0—Q)þÜRU÷zß%QÆ4ÒŒìÛ赆Ckþà’ŽeÈÔGwÄÖöók>ÍŸK°!g~=Rû’¯×,‡¶7ÌxYæËözIGœ*Žò»/Òõ}Hâ½vÉÉ߃ù“S+KƒGDg ž28-aòycù\+M‹œ³ jM¥j#Œ¬\²²mÉ–kˆ¤S¼ŒÞLÍйTmv˜ï÷øÆPˆŒ ÇßqsÂk&›ÈW=,;P ’Ë÷¼N1Y»&u¯(—eÁƒVH?zôß9Um£:º“}å „¡Ï2V¯ÇUKõ‹÷õ4•~û“^I;/S,,fµàZÑ×ei^¼™‘…ßðßrõàplD|™y¤oä\à6ýÇ«ûS Ïä?®Ò±î\·M”„ lGX܈ž1špê„ÝœtÛÅ)åsÌy¡ø >‡ÁYŠXŸi¼ÚÞp~‘«ÄhYåúåTª>no5-†|ʱµE ¹•ÐÉ.äsêÔæ½Æfz#©¿¯÷jΥܛé©\œ­/h?e£R«ÄðhRímoo½%Î#-É©B U¹z6Ççu’à]ü´fŠZÎô±8BLŸDei§’ç}•1R„9=o#Ææ:ÆbrGÀBilÑdU¨³jŸèžCŽÃà, 9•ã÷ºÎ¯UÈw·aMá-Çšy¶‡{úmÒî2 t¾v~‚ o€Û=È”U¡ß:WúµJg» 3þ5’WÈðdpEèTÍŠ¤>D±q@Ìù8ë½õ·ÌxÝlÁE~4†1Ä"mY•)VG¥ÉëÐ0‰2ÚÁñ$¯+ùËþ{y)ɼÒQÁ?“¸¡ï«ïQ›â8• Á¡v+j³Yäµ’O9è|„ɘÕÕ‡–é°6/lÒkR’Y¿LóãwmëÁiΦ¸LWL°òchö ßíîc¨×LxÐÄ9…Ë‘­3·þù®ˆÃfx£ÿ¨Õå^[;á×­ úì›#‹òØo~pzc¤4f;ñPè_ðkq„V,ØB 1@á¹p£½ý¨ùmmüqpÅ÷¸qõþD,iPMÑÁ¬Ô@6 ðcð„…×aÀlгQÅœ<Š"e§c+êk5ñkzð%If%#êÞÚÜ@ ™»…í2íMì#äƒß¦‘if{Þ¯5‹<8hCV…Nù=€eÉÕCB\Á™¼‰»¬Ìy Å¹Ö ¯¥Œ¬9ô¨÷S–þ„ìk“7½Û9&ðGŸÔXa˜? h5ÐONe­Ê%¿úõMdÖ’©‚³gò$õ¹~OöµÏ'Ç$w°ùsA»)GL+ñº_/D¡Ô>³~WðÁ8tPùoK½cøL a_3`›h˜„g¼ôצ¬“¯¡£îþŽ~×i!ëÇÜø6…ļV>iÆ£u®¯žÔv#–¥È¾×Ü7†k>š¾õGq ¹ë’Ÿ‡ÛÒ&B÷éË>b&HP"J)Œ€6øhý>ü*´~C„",Ïç Œt\¤EØ+œîˆ Ä=Å’¡ýˆBJ·ŒÁ‡Yéù6÷¾þlJ êwÍ!ƒ·˜Gü.:_äάInG:o"v±0#׿pC9>ÎX*q5,©JeÍ…ŠÀ`Àó›6‰yä°íôš­Æ€íXÏ-}”Ód°`Q©AzPyýÝh´ª¾`3YúØm¯ÜV ’•EUÑÑBùf^ž„¦Å+ –ä7ÖµÃr¾ÏŸb†˜ ÚÇŒ1KG¸.&ëéÖ1‡)ôˆ®-ÁQÛÚ›£b^¹†¨Z±tVÞÇ“½0ˆØYgv¢V{ÞèÑý‚†¾êňy^¹é2ÙÏ4ßtÖè „¡„»ËÒŠ,Ý3 ƒ]ËÍ%ÝdðšÑþ^þÔa‰Ló¼ Øo¹˜áVÆ´aOÚÊkMKp ÐO[IÒ¿¯²w TŸUæ²½°iC  f̆ÿ¼>äà(¾³³óNœ˜<õ8»íȱ:ó¹X—| ÓQ —n’+$äV7Ö†jû“c)ñ·_5V zÈÇ÷¸ž€n¾.ÒP޸ﮓƒ“ Þ…fœHñƒËû@5ÿÄšÕ ]2©~[}þùµ‘l4 hé¹Jêy–ÏvNOsu§ƒ¼Æ¤ŸªÀ—0.V ³7!.CD“I•гۋõ²Wm%SËMö-±GYCúø@Á½¾ã—îxhÍñNÓy÷«Ûld›Ê,©#É’:çQIŸ?„Zbˆw–!ƒ<½¥”ãϵuw¦-³óL ?Úe„ ÝD9Õ/;E!j‚ÈO9+/tÚ«Ò–qSSrZé Ë8õê¡PÂy¾R4‘ó¡ï'Šx_&þ6×ðm?íWͳþ2l‘¹Óv.3tëKŽþtèQóÜßÖðˆæ£Ô*tÕ/ŠËÊË¥«¼eùCk³s¯%Eke£™o׳¬t&:¬×2QOG­;²ð6˜«¼_TÊÈLè±¼Ö{Ç—vÞçßá…)/¾[[K^ í—XÉÿ_äüd4 ª žÇ+õ%€Wp‚H.0¿L¡0õIUh/ݳƒaœ¼äD®H9b¿ SÓ =ä&3@³š„*"NG¸áÌ÷Ϊ±2Ü ß” Rè ¸t#’ìP¢ÂK_dÏÚ¬S×U_øƒ7pÛ°Y;‘ä¶Éaø*UZ Š|°¤Ñ-‡4ÕêâÎÇUñ°ÁáYBé û73ÚTÒLâ˜:9 7 Œ`%36Ïòl‘KkÐ;“*¨ÒÚ®xR'æ­ÌK´R'^+ykýês*uáÂÜkî·‚—m˜Nͼ"·nïòâÓ™# 68¸dxP‘‰P¤î§b¿ÿå#d‚vBcéíx•<'¸4°¦¾iëåúÀ˜ ¶õ!+¤*›è/ð7YÑ#~â7™“ˆ¡!Âú.=B“3hüÃ5^V-ÙÍ™oéðiõvŽõ(X9N@æÒ€$}—á(.¯cê‡óNšDòG_l<ýœß;ÓLSÚê÷¦Ê£ÖÒž@z£5yíÍx¿rðÔû); þSïåÈŒ*sI7%ÏEK±÷ñ÷Â+´êÞ3tÝË4 lFS§CØE¢¦™/¢}Û‰l«É ÝýÍhbà½=tM¡œ3ÒÆ“LÔœõœâÚ¤xB›žŒé¨ò2æ@ééÒ£ °%f‹ØÁ¦I'ôid õ^oˆ„Š—’^¡B f‘ ìÆƒ´ñ4G‚sˆCî¹XV¤Ž~Aéßx#ÿGoPˆˆZ_jT†õ9ªXÓ¼–7¤–Ng×ÿŠq®CX–’”Ü“©¼)˜€y$:H³£èí4•æ¼uÔosÔÂú©dëÇbŸ~Éø|^ˆ«¡íšóø_sTÀ›þv’¬o Î`ú hÏ(µ…w;_2Øbkïü üë…ÉTóÃnÜ=¶ª¿å w¼7¸£ü¼ÁÕƒ~Í¥@€¥^%Rв5îÌá4¢÷yÁBó7‚83±x9”“òßþ§÷ ÐîQÔ¨ É+P«ÃZÖm4ëq÷îéÀbÅžc!‰êÑOÌCÑNµfOqjÕpž; ·‰|N«ÛÛ‘Öɘt}YÇG>Á¤éÔVc6È€U9¬5¯äÔqi;WÊqꮹyÊ‘‘U÷˜º/ÙS?Ý‘~ónOÇNjDH€§œL䪂 endstream endobj 424 0 obj << /Length1 725 /Length2 37928 /Length3 0 /Length 38490 /Filter /FlateDecode >> stream xÚl¹ct®ÍÒ-ÛvîØ¶mÛÉŠmÛ¶mÛæŠm­Ø¶¹rž½÷Ùïß;¾qý©šU=jÖìúÑÝ‘¸½‹ª§ƒ)=#7@E\U•‰‘‘ÀHÏCF&âdjèbio'jèbÊ Ð05¨˜:˜˜ÌŒŒL0d{O'Ks ¥1Õ¿A€º¡‰¥­¥@ÝÞÆÞÍÒØÀëææ&èæìJïäÊOÿÏ"SS€‹…)ÀÌÒÆ ¢ ¨%%/ ”WH˜Ú™:Ú]l,²–ƦvΦT3{'€Í€±½‰å¿89Óÿ›€›©“Ë?ÄÌœìmrbªBâ òª1U€¡ @VòŸåv.ÎÜÿd›»¸ü«;Z€ËÿX6†ÿcýõ?Q'ÿXô0LLKc€‘©¹¥ ÿt“²3³°ÿ6quøoèBÎÿðPþ£!ÀÄÔìŸlWyC[S¥ˆ½­ƒ«‹©@ÎÞÄÔÉð/íÝ,ÿAþ›jhkiãùÿ›ü3¤\ ÿCÈÎüùÿY:‹[z˜š(Zºü£·‹“«é` Óÿ윩‰¥«í–›þ£É?»jbogãù+þÓÊ¿ë1(+ÈH+ ÑüÏü;,fglobigPqùGOC'“ÿþV4´üÏý—Ë' Àôÿ|9C'K€#ý¿F„ñ_ß-½ÿ—%,lïáMÇÌÈ  cag0±p°8Y8}ÿ?t]œLí\þ-ú?½ü×ÿ÷0™šz˜ÃüYµ7æ ±Jo «ô+ž¯§™Ÿý¥F³Ê¼6Ów«ƒl9labptó ŠSà‡?hÄ·wµ+õÐJlo w25C¡·ŠóVJReîW·ý¡TøÞ¡¦Žmk,vyï’¹ñ'H‘zš5;ï¢NÚ±œY‚)æWE×op¤„õ¥'; *= ”,í¿p¦4µHó¡E7Foû@ ‚÷ànɰ ,Š*ŽÂµ ¯­Dt´˜z$1óu±±E·ÃÈwܪ¾ã†·‚„®Yö!2¶Ü…VtŸ F!¢ŠÀoy¶väðî¸!s–¿dªyբ⷟ùX«º}#öæÜ^ýf54t)£\f)ôv¤ňa‚Øa¼Çl÷¹ó6dV\d7½'¹6'Ö5P¨ñ+-Oæ ¶0ˆ«£;¢’oœÎ‹>œ±ùlvÉ„•3 \6Mä/Ù‹@íÀ6MòíNádEΠÇÏ::¤“à*Y>€ž†ÆÍƒôaíâ-–nMgÝb¸º[ÙR)$ÆE,Y²Z↼…Ø„’ר.TÍšÀÈ.}éÖ‘%/ài*Ó"=ΫŽFkžRøn™ê雥šžØäå¿ ª†“y„ÖU ïò›x5JÊ úR†4 §ÎàO„ô->¸b»Nîÿö¾N A € ¬Î_*™X3Z儌Þ+Ÿ(W"WƒpσqaœëaÛ¿Þº[Õg2›{ÕsÛoòäµW/‡·‹¢è,a°°@Êf¾Ã=€[ –¼ È’ã ä0ŒðտȽâ¥LÿÆÎrÁ:—H›K°*,ï–ôëÔ?êÍûNJ—¤‘\AUi›ìœ-÷5â¨o¾òo¤bFF±yþFK§öIñ3ß,ëi!%tå=ZNWýE®!{-Ôc8¥eÉ¥¿õ†w⾦XChž’±˜«àFöðËSA)$™æïå6ƒc·Ú_h÷ö§w?^ÐãZdl,㛀éiÊøs”‰:m‹·× «|;ñ¤m‘YæÓ ÑuX!Þ²Ÿ\¡3Rq·\Û‘üèï[—a+¥ƒUƒ€ÇýÜÑ€nÀÌ!ÃÒˆm~\¶Ö*6óìTUSë8©Yíó™JB#NÒ¥ÙPû¹®,œOIJë7'î'ÔVw>“àQ`…î¾`ÙÁnbó°jYNï³sŸÍ÷âa)§Cë%çá±_ñvIótZΩfÐZYIð±W(‡–9ÒåäL-‚ùòåçuŽ«+›«ÑÄNa »Ó7-0 é'P‰Hß _åëŒKÉý?WªN踺í)4ε9gU:=÷‰˜=¬3îÑà~½TCÛ¸´‚8îEHZvµæÎ¿ËC¹=*½Fe6Õ‚DÖ]£ßaá†ÕPÀ=Gŧ¡G/ûsÒÛ±ùe3-ýâ;R·×ÛvÛs,ÛŸ@»ÉD—äoä1ì/r7’º~†d+’AoãxtbZg`IžVnQÂò ÔòOÒnX!ƒêÒzŠ”‹:›…ˆs!(ê±èí—­´2«Ý}KöÏ?ª“óɳ]‡Jl£Aâýýæ¦Kƒ÷»{S Cª¾¶FuèeI—£9Õ3ëItͰö:ä쀲ElŠœÙõ™H#•â‘ì£N1#Æ#u\¤Ý˜ÂphÒ¢Š3<ôaÇøÝ7i/‘4»%šãÞÛ®ó÷G¶©}KçaçBt[Âë pP4 Ÿ{ñ·Áïù92‚‰&¬ëÆà#G5MÁy¯/õWF𯻶”Ë?6²P§o}ÛRâ›=RñLŸ¾V©Š¯_Sxn»ŽˆN“µ@u‚¢È¥Ë?z«æV‰@ž«JR h•[œNܯš1”µ#¹Zw ùÑeñ6ho™²ÜB$ù º%1ï0¨}Ý›g*…êTp? ~¸§CîŽR5j‰ˆ7¢ˆGгòôà?Ë~¤!âÃÓE‹gÕzƒœ  ó!þLñlq/M¯?[ 8Ù‘x>9„r{¤1á×Âi}qØ—l}¢RÆ—®Úúw?'@p^ðЭÝõprÀÞ«:ükT\Œ„ß]u³÷+yöÇçÛh¾¥rí¶•[¬€d§Á7¯–v[?ÐåÛë kmü~B«„vAå6á†åê¤ß»9¡ª™¹üšû¾ÈJJ=Õ%Žtx&6ÏKR?ýÒ*ãºM8j–OÀh¨ÃþÁüö ä›^Y—6U ¦f)Z¬ ö¾*k‡þöŒwñ9ZT°Ÿ +D7LE@“ô>”Ï{ÆþäT³Ê¦!ÛýVŸ8œ0oº=a ”1žTª½L¨Ô;žxd¶f¡¡Yêªä/n¬qŠwœô…°­Wa‰m&M¾Z\„xòP³¼©9W&.d<÷³ Gé ôð…üµ]fV¦[°zƒËÒýñÅÏ'L– òi-p RÃ}öä±]ÀÞ¥Ü5;U Ö-Äw qÿ…©ûyy»aÞ¼ÄDΞ/tù–)z"Ÿºóbmù×*x¶˜‰r}—ÑYÏ$6‹óù¡h-³ƒåæŒÎ£î8š+V«$ŸâB›Ù{GG4Ï ÑwÁ qáM}­æ¨Êiç™[)t¨¬I·WòÁµƒ©‹T—ŽJ»jöƒœPÕºr¸ïô< i˜YäiPJ§†rÍUù¸ìÉÉpæÛS)[Y+Èi/ ŠÈ|‚޳Ñò=3›g„rlŠ|þ>W«ÔX¼Úi±;RTÃÛ $5+9ž„P‹{ m™x™ ö›:¸ár©DõøÈåñ¾§É› u½{V Þ1yè´NSAHTÙ9Ùª˜œôWM.‹ÊÛyýšuVtu±ª» íTVÅÌMD<‘d4¾Nci§cyKJ³ßB„ùqKe–/½š‰ÃòÆ(Ü»ÌõÇ‹à’õÍÆ·ž€Ëþ¼„Zß;Y Ù*Vïtï Ô¢€3> Œ8¥9ÖT{vçÖvàzG×ìo”’·?}‚- l‹Y‚PN6‡„q`0èïøýñæ@¤cäDØèï¢1¢ëùÌEW Ùé,Ò‚–Æ¿j–å8Ø¿n¤ JzI]\ 5Àvû4þxc2c}åÈ=_!r|p0¸èJÙ¥ßU–ªÌ€«î öSazr'|ŸïšÿL$P„ã^iž‘Édæ0u>£DdøÎH×|ß3?œK[XEÿÞG×–êƒ&ó}+¡4FN*ËWE0ÉU,ֱ͑Ý;²tÃ;êóüòŸpÞvh£ Éœ]ˆ1b«ã˜O¸ÆRÁ>Œ œ5í/÷hë´âFäe fá¤/Ú¯¢áê<„Xc\#ø©©ÄÙÉ 3öÅ.ç±Ûð¿Fp¡_î";"?èHhÏýMBâ€çüàBj“ÃÂl\s:Ñh=éø» 'jû .Ìü¿Ë¶A>#Ç­áËË ØÀX–Ï)í Ècvöp"‹b ïëÂÖææØQGñz»I×ìm#µç º-+¹}^B,µ+ü…‰_±ÎÐ$Ü{ò‹ºˆ+›âƒÏÒßí>í¸Æ´xý%‡IO2vñŠèS¥&ª¿@ÆÚ°w[a¥¹Ë ÂÔFËz3ÄŽ…Ëm—Q%Ž‚Y„XtóU+‰1êÏupÔ›Íõ>bÎÐñRQ¢w >B6½4ÿžýùq®iå=~?7œªy] ŠI \?Škw•ÊÕâɳö£ÑãAÓ B*5ÍH2 ñl ~©n ú¦à €Q½Õ•Å+8c ½¢¢‡žÝÙ†‚DxZw÷2\áÀ1Œ×ï„¥-„#ÜvŸª·ºX¸?]ƒªJK£ÅVÊbÆYHH8ÒPPë=óÔÑÈ`©§<Ó@Ì«?Çxt•ØŒÏ÷RžP‡¹ï7”a†RÑÜ~¢”È2“ë­¨…øóñæ>ùœJPl›——~=­ØÂlŒLØÇ„ö`!ñž«N=‚µìNU[úÍD‡C¸î¦XPÕÉ ÿ*¶4šSmÞåa–¸þ…Ð-!T–œê#?îs7@å6¡þG,@Šú0#øCè‡íììá¹ëõ"k\ž@=a¾ÛË>ý³á³I ¬î0Ì-@ô퓱ûn¿e=÷½PTE|¬ä†þ÷á‡ì•ŽyÏÝÞÙ4µxÈúÉô_¯|$/± #Dzeª¢©YÜÆT2±YL$aÕ{;¢/söGÆ;;˵w#ÃâL#êÜWÝâfè+š/HïåYÞ*ën¤®'o“ðÉRãÕõÀ•»u0E5]D(NKN (œ´0WZb1q쥶Wßà” ¤LÕ7ÃÉ6[ï ýˆX\­ö€¿¿KŒYÛØTšKU³PTñÊå YHÞëy¦K­ßY'qkL]®‘î÷ÙIà*­û‰©r‘ÔSܶž‰n«*ìîÍÍê}Þ%oF§îK„ ²*}À®õOÁ6…*b^)ŠCdDk¬PájEæÛÍû¾L»–žUFOEDl_cPz‚ÕePÌý˜Æ5˜‚oÎ´ŠŽ[­¢›2òû+\ã¤dZÛŸØ[Ôè èñî„.€–€6@¿Þß™"yñ\_9é}»öÓAƒH˜ÖÞíV\1Ò\V>œÙ8'ž· Ô²¥[è¿!Oéßä¶ÊÉÓd”¨Ìòé]·›ì¦éôå!nBJÙ«l†[K¢ð`p°2NjˆÄ/?()éÅG|qóôarwÕø«Œ ¬Ì#~ýJõÖ±ØÓÕ^Dž@ÓÎgŠU‰Êúí‡gxmœïmy¨£L˜£#­7k–ÀR¢HÆt8Ξlº*g2ô†öbž}f]ê.\Ëoþ ßßq/¢!Ä %šá×]œNüiƒWú?”‘XÕôf2ðÚüê‡ç;)Í\öß]Ø I#5¿*òéÜ8^¼ÆyÇ9œ¢%Ð#ÿ¹2® Ò%¯¹b{7]ÉoѺ§)ôX°*67ؚėWΠ%~ac¥•U2 ¿>æòwx½¯´*y¯©xw’Ý5øƒæpÖ}ÙîælÓV·àhXÎæs,CfÏ0Zh¼sh`‹ãÆÊ\ï@ÑÃý=®¤œRþص Á4û ã‡:*µÁã?`ãç¨Òd)Ôn#YŸb»}Ù „“‡ë½xüYÑþ¾¾N{n½‚|ZO¸h¹êŸ=ð’?G‚lµŸOÖ™Ç˨T,ËÙ¬„ž¯>Mž:E$FIæ8]mG›·/ ¯V¹¶°B D*¬¹¯ôm›Egg2tÌQ OðnÈ]ôº…å% x•†ºÐ¸LqÅlÚ5Lè)Um§)º…°)ÄyáwB܈55q N3JÞYq÷G>b•îüV½ i™Ó¯‡«óÌyAxëÄ!'½m`)ðá(døu*´:¶ÇJb7s‹ƒØÔ6p´I É¢ .Z³¡ŒšW4ÝX]ïX¬Ç•ÒéÁZˆù·#iL³&‘ië†^‘u¤³8Ë:;QYß•§<œöÿÑÊôÍ•païöÙ<é+®?JÞ²‘àóÙ͇eoÎ"#øân¸áÿ¯={|a‚Þï”Yt¦‡]d«–q$B¬Äåetbg*(,îýo ƒg™ïH¢Ù‚ºRšÛRpV³¥¨žšÙÃæuBÅù‹p ˆå3IñøÅ°CM™Žü|22›ã»£]IÍͧg¶èr·_bsH¿„<ÐJð¾s-eè4žWɈã›7©U˜û“0NáÖçÉÑDáñ›ñåRìÕ«Ip;°Aü ®n:uƒ“äÒŸ" ÄjL\Ðæ°/Vû”ˆÝpaÙC=‘éúeUÃwžŽ”ÙuÄ]ÄËçT|Ug¢õd—À®÷¯ÀÝ €›ÝŒŸCt¼Üí[½znj‹öÄKÖé;àÀ½.ÖaZJà§æŠÜÒ7|$Å'¯+©2ŠÍüTÎ+ è›Ð¬ƒ8Ô ‹T}¨Aöõ÷¤ZäXW}ès»;–_rM@!æ¤xc3¨!3xï܃!Áïcܹ©úê%h=ýô†ÃqœÂ‘Ÿ1+¤¾bŒAœš”pEÛSŒD¡G®8"Šó|v¸JjxÉç œ•£ù8·´(ã/îz³¥þß7(žîkr)åA~7—ÎU?mŒÏ)<¡ð­ ¿&†à>|~H>*ö-ß~òv]ÅœÈ02Ƹƒ´Ê?M­Ïœ;Òh¹¿òEf3lkZ7Ô.‘ç„#¦[®ˆ¯õ¶Iö^ï÷&ªéf9’a ¦Ý¯ÜŒå³mqá‡k,í0½Ú¸€rè׿å—Û&»-Lô],n6;;„¦j-ŽÆÛbŠ›pi îi½´§„0Âašnè åã ¡·h™ŠšeA?»÷‡ààæ©jÜ0i©u&ãyBGŒ(>“àÏÔP2‚Þˆp0}Q?ÐT6…ére$r M_ŠQc¥,:žYb x"3zq–pÊTj×B¼Ñ²Êû0âüüb'í“Q’„qÒ«6*h Oñ¸åâÅ×¼èyµ~~=W\˜îÌð|¬m‰¼S°E‚;ŽBQ¤Ê¹p%ãÑ‚ž¯”‚ÛºGDòË¡æÅ«:ö"¶ˆø‚s@!Ù+BpNÖ¹¾½¤Ê ÑòGœ$ǸÑ¥`ŽBß¹ꂬHD Åh73·²1ó:Î4zð{œGèòs†QAœ³6¼DY–<~iªÞCÀ(HeºØ ;, €Z.G^‰fO¯åÅdY˜6G6<^í;R¯Ó8æ&æ)Ѥ@¢{ª³CFGÚÁšœ¹yhz˜ÉÕÃvN·íÐuh ɨ&: Çg cà7Õà2ŒØÉ’ú½©së³}^‘‘‘½ûÓ5¾!„˜´ù¨Á¥6p˜¾Ç–)_ñÙ6ú£ŸÆ&ÕI (aptÀJ¨{4Þ~áÃe­*Ÿø2‰žò<7(PbçÓ87s9À,(@¥ “R|€çÅË\j^·¨!Lw"­èx1û¾~…4 Æ%å“[Ùÿ®FcíC” 9´ú¬Bùù »E°ÿ¹hˆ~Zý°½_Ã’ ëä˜Í¦€ÿíqfï“·ÀþãÄyhº=Ý^Ï`—Ã@ ŠÂ=žŸF)ÐŒÕÜÔ–×@{vy˾nèá¬ëN¡ãýçË7½Ãƒ ‚.¹$÷ôYÉ+ HFÀÄt#j¥šTí†Ñ–/Äu¿H¬!ÑÁ_FååZJ´fq¼õ~ï+oÛyNPý¥d[NeTÿš«°`Õ•Gà?zCOÍZ"æÂ¿?±Ÿ¥{´úwïgxj:: ůá6“?¢¼ýÑÍE!y?Õý`V¨Ï&)×f¹”¸Äká&ÊD™†$PnÝNƒ‚û׊iÁè;$*Y„ÖÂ0­=)È]L®ô7% ˜ËBãáÏéCû•æÇN;“+™¹Ô“Gs¯éì=]æ!A^ yNæùl¡ï9*DôÆùA6±gCBcZBæH¸Ûrü¾iÚþÀºê,êŒìŸYßø’–çÑM ¶b†?EßEÍÉ0õ §h´VôA¤Aüô\UµOt‡ž Ñ£¢<è¼Qà6"PÃ(H&Ý©n•8Ú` o7®„käqþž¡O‚’I?âI׳–¼1“•øš7­aÆY—9,ßpÄ(/+PÊíõ–CÜÏ ;S|Ãý\’[ä\î‹ðþÛV‘Âß±Åá’ooFÅ–w[rƈPG 8ÂåpI>iƒFåÇôö°£­c ûR0¼À!v»à Å% }ì½Y¬ œ™Y!@ez®ê²6nʳ#úhxiºrx’Xm= 88¡«0GZÇŒJl2D؉¿ñ¢~²9õ,wœ ;òÙ¾¹D.>]ì«ñ‹öÕU¼ûºÔtÕíð.’pRdi#/§·ðè’o멤êˆàLÊGÌ«OÈäb“î°+´¯Á÷GÀ‚.ý\—Rí­À´}AûúŽüýcÍ:7PL/òÙ”Ä" œ-¾ä¯WøwçÓ}Ä^ñy±©9#iùœ`Ö¬åNe9ôÚ{Õ›¼×3xQ-ó’¸vÙÇÈ'’ Ï‘­:q½E…^¾6öTÛ`w§üÃ8þû wÙôØxp¿P;(„§  ¶æ¸¶«Ÿû0꾦z¸ð$RiDÕÙŒÅi()ƒgu©^(@]v´Q}Oéacç^a[ú8åêž• œîf_¼Kž»íz>(vwYŸ_t1&â%¿o–$÷¦LÞZÆ{q­Wˆåkþöe´F»@ôW–k-ó8;õí¼@Tƒ…OùÇw¼:Ê`üÞ–ÚÈ»A±@† ãöŽÈMY£k¤ÔÞjNðDQÙÔÒ9®§ˆ‡÷®PK‚ËYÌa‘Îû_Tõ-zRãŽÔlNÝÔ>ú°÷då~“ m³Y{\1þ¯ ä¸PA€ç.ï}Uðü‹\PIÇzÎöô®dÎèWPÉ;åçV—|Ž‘}˜^Õ¨jHìAjŒ¦ -h¿Å#¯t²›eÞÀì§hÈ8Û+dm™Q2ßUŽ•yXx¾;¢VE¦ƒ«}KèÔà*pÞˆBoz.ú`Æw$£#;òSýÏ‘Öô¶>«6PõìO9WõtF©iç,tAô\¸ç&2Ÿ)¿(s !< šC0\Ž#Uå>)ÝH ç7Ö|­9^j½çÍ?U´zxÐÖ¼Cúü_j¹)Ô½‡èšùNq ÛN柅)˜o[ÇZê$­í˜ç<<³*a»ÔLfbUúzÞì‘ot9šx¹5Î>à­V©0Ž\În*”ÚÀ.N+¹,Û{$œð †R²0á0#6Ø–ô28`¶»1^…ã?œ(Ç-ެ‹@Ñ&‘¼ŠžWÉ `àÄ-UÛb¼ßCùð`ÛÁppv6å1 Í?°9ã 3Õ©‹YuòU“A8SfM¿ÇØ^ZwÂÓçÁárt.J TüÌúŽ$©E#¢•cÖF~–—–A¹5AêášÎ4¦-Á}@ Œ+*Q<\"1Ýžý!ß…I–¯r ¿Qtµ·æÇ¸FãÜãw4›$Á´ÁuRj1[µœGè§£²$Ö ³úƒ2^ðñ0ãá›9géÛñЫýÐÄu¯d;©ÚçG¯ƒ¸„²;Ù!‰¶je¾æï-vH2üº‹ûCùS®1q5¢ˆ¨)ŒÇš²ÛR÷ ã‚|ÿ§ß-³10cj!þj{¥±»4­_s!>¯Ÿ ›¯Ø loN¢\¨ë*.©žTgY-|¦¢Ã=œÝx–jÌÓ0àcñ÷<%“·câxÓ…ôb¶ÿz›ïI‚¥Cc0•õ2kêÜ™ó$LÀ #;WÚ„ÒnN3Þ…ÛqöEg¡¤ êÄi¸;(o9´ìþå¨#òíò85¬ÜOôy¡9äH~{ÁÊzp&ÒËiý§Ñn¥+?I< v»C)hŠ>ÿÕ1ïŽ%[ÁÖGjT$J’Ü…-Ï/Èi¦F*Mv–¥Û-–Ÿ)­°Çh>õ—¬`—sÅ›sÕÇHƒ è$ë]W 8“ÄÄ+ËÃÞüL‚e±2ým %6@†‰bë`s7ßÑÚzNÕŸª¾îuön™XÝ=a×çë 8KqF²ˆ"~€&~ºV0jkѼ¦ä® l­*[Î^<Ü•¢;zöv‘„Rê£QJzŽž[Ë«ù>n®ø³‹kÛùGó˜/¯–.¢Cõi"ø _ÐDÕ =)¨T^ó^jð¦)Íè/ÁM”‰ËøÛ<;AsæK½ïÒìF§æöðR:UéÄ ÌŸvÕ˜Çhœ®¸³FH¬ x +»s=¯+Z™ÆÁ·­ŽO¯˜¾:»vë5È 'ÀÓrPßoêøñZKÜ ø“÷Ó/6uö¼%å;ú^ôx„å5ð“Êìæ¡g‚^'JЮ§v<Û/z ~×r"Æ™†ºÂ虑­=ˆûCAaýa\^4*Ëû³m¢îF› S¹Î~“pkf/©ª³k½û>T›‚}~¤’f\ª­ZAìfçžG\GÌëÑ´µ"ì€ÐÏ›ç=@0²5<±É¦0SH¼ÂWEB LwJÊÊÕ„ý<¢·N$e13-ZáWäé[ïX™Ò|¦À‰ãD6͉%ý%5´€Å¿Æ#Ü~ç‘ "T=°_à R+û®tk­6otË3þßZ"ýÎ07ä2ѱ¿/é²}*ܶÃÀOJÞÄ·``ƒ§¾Ç®“qÁ/ ¥Þ‚ã,ÉQ6’ï^Ëû,;ýÉ2¶/r¸JÀû€ÿõËÜ©.&sÓ²ú“{Yé^Y©^¤ Xuþ\•"ëð#Iû•)bh}%)7ºg|jv OÀk<ˆ ^ÞNÉ.p¾Úo$‹7¢)§ÀÛ.bó‰ÍJìøAþðÝL ‚uî‡`s0¡â§Ú­=fÈz)s¹næV.ì×®vßûvÊþø¾,—™ÁâÅLÝÆÜZüsVá;i¬¾h$e^ r'šñp+4ã9 òRlx¤kP¸“ œ>œÒ¥™T¼’dáõU™b¤»ðü¤ùÍö°,[:GPö=WK›7{ŠlšX‚'«äSéQÖGÙw0Æ·»åi4ÁÍ µNÚ]ÿ=ÍŸ*Ž ½õ0û;ªIµW׾λái£‚éÚ±í"íu’‹Ï ;Ìà®b0²u[Š׫dè%Ÿk¸å\_‰2²ãÖк£U(Ë(°W8™J>$¿¿ô#‹˜›T¸)’ |Ôiùïoö’µ%áAý˜/{rÍèÞk4 ³BÁ“„湑"â˜Uv‘ Ù¨ÀE¼K?'¾©lÞÕE">’?“UÓviQ$¦ÎñÐ)Ž…ì míé³2º?øã ¶º»™;ÜŒP‡A…Ë?o׳‘Öˆ P³-<¬’/kH9kBÐK;ž ^5< ê<:´¨FÜB ØÓ¼»«|oÚ<¯ý™Y¾ÒÁ“:é6øª9E®èÃÙ3bš½Yi{ç…þ*ü”/Õrê;‹î¼m?uö}šŸ|­âÆ,ZÚ °Îa)—ÈMYÎÛI<--™öٺ텢Ûþ ~ŒÕm²cjÛ<ËYR¡w•Kë/Ì1¼ò©±±sàŠŠ– Õ½+HL‰5¸Jj×S€7é‘0+<¬Ð{=Yé;õÞè/žrà1z³HãÙŒg$èC³1¿!// qyRuGÃh~=¯'|çqšUOC'+,%.«²oξÌzqf[g½¿ UÑ¿F¤Fn3ydLPÜN/þV™GÙ C}êKƒøò“è*鲂0o©’'4Zòû2;åtyl‘Šs+ëHðšKóESç·iuÃÍg Ã{ŠÚëkU‡Aм8`ÜXóÍC ,lÞõÍW¢°sÙ9v~EkØYKøþ›n]@ÑNuÆ=ê’9‘ú‚€ÝÌA!š¸ùëEºÍ€eq…r¤R]A’t~at®ön­³EûTÆ@-…¯éŸ¬ÈbМS‘9çrð%OM`h£¸¶÷º1aêça=¯¢øö·Èïù£ße_’ò¾nìäåRR¢›£½Öñ±«ø_OÖÎiWŸ¦@1 µ+DºÀFâzü°D>ý¿oÐyÒºµø¹¢)2“ªt›†D&Ãô©î.æÐO é‰hE+]¬gÌÇE^_ð„èÖâQ9åø*}*ÿÀVæ}ö‚¾ ÌŸb—Jç€.*’˜òdpK¯f•I½{L.Уvm5 ˆ¬dYÔzÕlëe›Úµ»¬_¿"V0[‡ }+wœÆ?Í 12jÜ•bôCâ^ýù»=͸Ħð 0*õnšž˜¢%Ä£ ˜d‰•o“jD63GB),ÝàkGÕ†ë5½CÂD$7q©l«”ù]üºûw“…¢7À0Ì[ ñž¡¢:G GTH}ãÑJoY`3'üœnK^e´ë~§.x§P¥±IšÀÍÉa"{(Üzòúæ÷ò~/ÒSq [š>D±Ó´§HÕD¾TÞ»kãëÄRsë¼zê!…N:ø6²ébÁ±qq£<,wO¿½·­`ëïìw LÇ­·Š;?·@ê ¡q:ž'ûI˜ 6.…$ÎŒ¦mÖ8"ßl?ÝĆç~ŸÒš¸W”ˆ9: y³WÇ&¼>ò¥.»eU”àShלP¢8gJëH3„Ët/ñ­nvµLaA’¡¶HýØEMa„^ p¾7¢RaÑrˆàÔÿÀ¯~ÏÂŒ§óUîÿni86Éó¿™Ç KŽw…(¥è ç=¯ªTÖÐo]MQ‘ÂniÍ%Ècrëý" ª1:é€ÙiáØ‹‹h B}«h¡ 6|ºSEC@¹µÊ¸8²_1D»Q?"(n†ã|õ æ#ÚßÀ„¦*„¶é`èi¼y­N:ÖŒåXñ=]b›g¹`×ÉnÜ1n^Og_ß^ûœR/öŽëRo¡ºÁò’J£CÀlQCÑ?‡¯##ðÖ…­÷eCqK»ÿIèÂ[¦7r>ìÌ¿IÆÉˆ¶Û‰mÔè~&<¸“R>;ný™ Me„gÔc" äZI½ „€íQyÁ jt•,’-R†n§œm›Š üªm§ ÿM×§æÅ<+äù‚¬¾#³Þg+˜)8÷ (Y ¤ÂýÅðý©Üvv|¯ˆè6åÉ{ÒŒAâŽþëF)WPç!¸å 7áB¤Ð *Ý…œð°"㸈Ð_gXLp w:cîk¶q9ì5UªZ/¤.L?=S.úãØîô Ñ| £RÒ@c¥m}ªÇÅÄè-̇ksÌÆ !ÕgÓCVî¡Ü7ò†¨8‰U³dó“LRðùtøBùâšòkס7sB/7`/U[Qd×êØ!õ×ÀØÖâÃ]<a£Í>My|ž1Ûy¥ì¹zJm± ¹ÿ… |_–<¬1•Ñk×oÜ+Á³žä,ƒ4—(òXXÂß!Œ¿äþÝTÈ)r­fòJ²ºÈ¹ßÏ@'zÄl®WG [7•RÊ¥I²@]g¦±—²©Þ%³¶¸Gm¾°-œ.Q]5މ¥ô­ îv®54X£Û„{®ý(OKž]a ý:¦i)æÈÕ†g·Úv÷|í+âux/+3E8úÏ/?¦´â@Ovc1PxÏÀ`úŒ& ~%:W.˜˲åç^èfßfÑ0 \ÊÉc»¾}.Öp¹ÞæD3%ݺê ×—r ú;¸>xQå¹2®ÿÂê“?R\R¡žôÚ5À\¼ [دgn£ FXUO´ÈJÜ¿|@©ý‹•e–縮¿"È÷Ú48,íÇ…¨çË9«ŸôNo§Õœüm Ѫ=-˜)Yt˜W‰—­2ïUvÍkùâ ƒ1ùî½÷¯a'Òß(úfÖ¨¿]ÉŠú-òØùéä‘vݽ¨Bj[[ߣÐÛtÂbÅÑ× umäd©IßнmÊ 5è„c·ç»ví\Œ6,·¦ÄjŠêÓˆ0fµX…ÕÒG¸fÚ >ÉXä…Þ{)(¬¨–jâ~^‰–\ÓëàôS?m ¢d'vn÷,kC!LšS†ïìÅ ~ë‹#\Uc]¶_õvÂWþë{q¸%j¸"]2Bãw.zŸ'YrB:¢Ò VƱ;uì”éªg¾œ·›4'.Bõ¤–t>Ò8vjcþÒºvëÜòä[øð²ž>ü1àø+½´1£¥¾Œ«l#ñÊoéeõd%.Œ)ÑWªG{ŠïéÊ“iŠ#¥yºAlD‰Gf©žRÝÜÁÑ}èÇÈ̘(rX«ç@Ëz²»ØÓóÃ÷¡k»X6œA—Ï/±}6#NÅÖZöq«`GµÀ7—Å^àÊ͸JBb«—çVgOx6‘aÆ0¶ÃžºWc.ú•¿»2(¶ªœê^öfȽµ§ãŒ´XbŽÉqì˜^ŸfCê 0±¢i‡Æú»8Ìá£~ÖL2[X¼èÊÎ,ºaá ÊÁBû’¿Eç+I×à«ð¡ºª†¥ùß_dµ•½œ ÄMWJg #[ºÊ¸y‰æczkÇ·[´ÁšP︙£-笽ÈËØút6YË¥^_¾þ§Úî!lXB—F¹â ôsgþA3~«?ã@&ÜÎŽîòÉ~M?Ë×áÍë\ÕFµ”ÙnLÉľâðÊ_?_åº }PPvP;d¨Ê»‰àøÿ) †O]m~Ö|Ò)Ç2`ÙŠ"Q}³˜Ááæä$"áΣ’Ù³.YÄ/ÆKîèNÜ9ü¶7N7 z´úzE°Ü2›Áºñ³iGäÐX´¦´}øé@Û/8úèbŽ®ÂCxÎOóþY© lÜÚ<.oÒ-ë_öéà¾DW9Љ©ž¦¢/lîò©‡HÙ›>Eºð@0@-yL’9ŽƒG¶u8ü@­D°=½&Ä S.ÅGb¬ãÀƆN¢ÿŠ1Ò5Õ=•Áj2‚‡‹BÁ[âuwvâ-."Ó¹±ÆUX`Ö!n¾ªõ©Ð´ÌuÒÛs­10ÚYÕ­ö,=°«ž–.£‹ÞB–n¦•qCL¤à.Ùl8<¡BZp£ü««}!-d±†ìoúhÒlC²[Ö'\«ºwì ¶f„çñ¥{27} Q–bRŽEBœ¦ÏPZ¿ëAi˜BGü¬Ô€Gƒ)"‹œ†Õ6;cn§ÛgC8B‰¡nô¢Žù7)Š.6FwSÇ’úñPýâö—†mèΕT±d]eù|ˆ{bb(´ â§bê;ü› Ö*úí7‚îž*(xÍEu!ù¶‘UU¤«’¶(ø»÷ÏÚY§»K)܉Ép–ßà0—l¯cibµ3}fµâÙb.$“kÝÀ|Aûj¦tìêä’qÊú“H]õ¯½謬٩‰Ï~øsyµDW·¢£óñÚcXAŠJÛ`i:‡ê‹Jb¹~äë 0¨Ûø3*)KÆ"×›¥*ç¹?Žå²nO»o­A8s8̵©hص-ßÄ™!Žý˜º¹¡;K­xbtôëb¶©_ô¢äƒ­™,,Äž`ëKØX‚G†Ã¡ùB23#ŸÈ7×›ˆ»«] ×±úœ¸üëÊÊ cª±•o„âÉF‡ú%è¾L¦¢¬ ¿=C$^—†ƒe:àj޻؂ŸŒ¿B0«ó\tí!áýB%¬\ú¯»ÿ9Ucñ.ÝÁ’´8]z.Â{×k¿½x£ôËÈ®‚HX#ñIRε–Éß­m±îñùQÐ.¹†5ãðËŠécÛÐáekaDˆlÍ'X¼Uçã~¯ åÐã• œç¤0óÓXÑ·{¢ââÕ?[áXón³ŒC·Í‰Â¡²t¿¼0l<®¥ž ¶Ø7ožÿÐLçqºðËllûç¶q!Ð ËFvÛ°i…¯Ù€¥ eËZ¾™dòV?I£j2­Ìø…0'xA¦(?™>BÑY0U 8 Ô”¯ïÞî’2Æw8Ê Rù…Ë1ùAÞìé#lã2ÒÿñÂåÐà>¡P·P}+‹¸Pmß  è’N÷@TT¥NÎêF’@!`Ñ@JÒOG†.ör.ø 2wµ]ý#ºõã<ÌäÖ4>ß÷B«ÚfŸ>Ƚz´v\ãñAŬ4ÕR§œÅñƒ#rÂIÇ”ðÎR­-Z‡µ®„çAˆ‹q‹ªëñ 8"pj"H½l¤É÷\#NûÖ·$é‹3`([F”^9ª8û(‡3¿èín#R#Çm5‹Zà»p­É7l(LM¥²º ­Üì‘gzuD¨É¬Ô—•YHºdFH×£«8áÔ.8©¡?ôqQ|I’;n¼Gí&Uiža×[•B¡ã&Õ(zU ¹¤ö¦ªqg·ióL8#ûr9?äïÓà\ð‚?ƒýu­Ûχ_]DEp<œË1]cìøW“µ@P&š= kTæ•j3‹ÓGޤ¼äYæÄX_÷R.i~3ŒÿIÉ{ÿÐñïI~˜C>ü‡®nü³öÿ›Â² }’ÈêK`Sx9·&N¦¬tL–ÿ3“T†xžÌÃ`ìXÎDÀ‡öqX«Á%¯»òLNb¾Þ¼EÅ™©ÑJ’€×ðAdôÆÕ°W¸"ãúAÆÕ#µˆ†©‚»ãñ‡‰úW$f:•àTÿ.&å¯êf¾ï JIϧ;…ªÉ•BG¤8þ@}Vôÿt±Jn ýîG%1õ:v¶nX(ž;AL;0“UC7¸—A]žH÷¹¢‹]RX˜ÁpõÚá,9…G³žû ¶O:𜃾+>ŽÙ° MÏÄ`0êJžÛß4… ¡g}ž~^Øì)QZHŸ¡’ ƒ],%œ“8™¶T-å0‚VQ\Œç¢Ë­¿5Gíž.ï<­¬9k(p!f•R£úLÞuÀŠˆTx­çûXØ8L˜œ|¶9s8«ÛÓW­›NDW©CÂþyô@P®¢ðX¥÷A3PžW7 J˜£ˆ‹ÕÎ £=Òù fßÚO8±æÎ­µO¨¥£ôW¾‚&‰A$¾±4Ö´zv2Ìh:'ø„Ž! MˆškøUe'Id6ýc¾:sÙ“˜E+PëÐ?âÈK‘?nL81Ç0ñ•„ÙEuhÙ«Zk ®ÁzyxÕ‹TrÀßZ·Z»ÍÏvIRØ„Y-p*qÝhÕ2îƒH+©¢DòÉ’@Nþ´¯Âìï‘:=‰¬»“›œråoðýîÛo0d'OÓ1ý²Øßapª…zW=yu¤B°óB@ËfBrJéÏŸä–]HG€W+gtÜ¥í!{$T(êÜýË¢‚û¥ÒôÏÍ.àJEœs<ÞmMüèùìö ]%c P÷o^ Á]LÙGíF²,Ò)8õú ½&~o¥»Žó4°H¥þÖmöx˜Í1È; ìÉ&Érì™!ªØè þ -ìBõ=>’VÑûÃù§ìIŠy —¹¹7³í —ìXˆa¸\þ qZ8ÌW[Û®&xôͼ ¬£™bGUdg8:QÓõÿpqN[¢Z®-Û¶mÛÜeÛ¶mÛ¶mÛ¶mÛvÕ=wt¿œþ‰d%k.±þvŸÞs¤5]hˆNâß.øA;`—œ ™Ÿ;]i§é#”yõÚŒü÷\à#-ŸZæyâ¿z2nš8 'ÛçßXHøx)ÇÅåy¯Ñ2×Ú2ò iÎMq÷ˆlsÅ=â,'V†/](b´?7ËÁó¢/ ‚†Z¶ ޽Ûîq)ïCuè.“/LòhA¶jE%g «m´8CpdVÀÓ0I\Äûíh+9òÍÌ2G ?‚©Òw‚¹\èÜϯùrùw©¥àÓ¢prÜxF2"w–HÎh¨üV­AÐs¿ìK!Á!ƒÖ„:•!ò.¸7èÏ"¸É€f0 't- F‹DWJèæÙF|è )C +›eÊ}㙜SõG,–8ð&ÊÒskx‘,QDÍý  `BåT"0 DÐ<… ¥¦SÊxm)ôYY*‘e£ Q]e €ìü›Q°/¸üÏþ>^DÖeÕÇe}ëæÚ¿R’ù2ÍB’I¬ó{ÅÅqµ1æ¾ä•UQÄC/$â ÉÆ´n„Ÿ1pŽR¤b*¾ÚVÇï1x"AHô­·ÞR ɃìzAjñéâ²8œ ýB^öa•©EâˆÈ¢ï)än/©¸ò8 ± ´­Üå#)¡­ªÅeÿzédùYõ¡d |ø¸Ê4dc&ÇsÂ3qÞDYy𙸢Ý3ÙøÇkvQ›ˆ T¶\É©Ægˆm(¿›zö4K…˜fh‹ü9j¨Å=‘›‰•Òð1{ÏxÂ*Љ_OBæyÙŠ…N ï=‘| møìÜ/™X¹J”𲫷 YF a*º¶UNzj? eŠ–Ðè]‘“éàsÒ¡ÇM ÙÙ¾‹½û/2¸&¼œ Üã´Y_³-÷Žâµ.àÊZGÃû½›­§G¾¤E·cÖ@RRíéâ³XÒùn£ú±Þï›sÐÊ)üäOµF0àÏ*†kÜ]«“¯ö4 ü8fqPHM)ßCY´ñçzáÆ÷#}àW!få¹y7ú¢Ëk,€eãÊ»…?Ä väHiáÍ„±;7 ”Ö‚*Ü^ƒ`VI„©ÝJJg‡Üuuf~+?Ëîèðgì&I#g;^‡úÊ)w±ç§nßß¹WÜkóR‚#§µ¨¡¥Öä}×Nö1;§ymÛfíÏvÒëS>|!–Lî| ð´64:…é44»BknK5½’Në&^Œ õQÛFœ€‘Y¤¦T)2‚3®×~ðaeïfº<ñ&ä‘„Ÿ5êÌ3,€€v{í«áÎS±ª¶€gZ7Z|Is¼v-<ÂóëgäI¢q¸@ô¬± hYÑ€LÑ3±îø–*²:oEþŒÑÑó(j¨ï¿*v0´cpô;É(yû©¬v÷ã ’<-¤¤€2Ϧå¸ @ž‹Ü;´oÚjr£à‚¿É99÷Ôú2/‡.ߦa;•ì=&wžIøoÜZÞ™Ñ ÅSŽZæ±F%‚ƒm׌»Äœž[D„ÌU \ESr”çá %›¥7±ð`¶>6 ²<‰o*­ eýc©µÑs¢}'í(_ÂÀyxÁüªMڈغlÌòä˜ìȨk Sü²5gª òëÍî‚R·‡F^73E+ #ÕdŸº'Õ›™©äÑéãWËJ$“ã3¥Öjõ§ù)4kåeE_'à ³lŠ¢8x¯‡,ÁnƒÊ‡7†¾êåmÊuÇÕ…aø üpW¼Õ}(?…F]ÆQfs ºu²‹†Ã'!-`Ÿþhè¨fm-/–‚|Á‡>°°% ®ç'”@q2pbësè'\f¡¡¬BV'¦h¬»©÷‰çH ™¨\ùP ,„ÌH~—Y’öÔo÷ÖZËÿ¼?Q2º~^Çs"4[ô´uf—<­5Þ•Î#Ì\*ã¢G_Îñ“±ž`,•[MoÙ;MÁç¼ZçVÎì,rîƒÅ%ÄǬÊ,îO´rºYNCV_-‘Æõ®xÎ9£ØÍ`5*ÌZ¸”LNaWH´-HÙt16ÝmýELú›5Ò~&Þ¿2¬Â¦C,fÀrq׸{½Z”]Zyƒè% ÛiíÂÃv¸±ÕÓYÛ®ÁCOÆJeìèˆì¬ ÒHÔ ‘¬ ª Q#X5ÌSh¥öˆ”cìœÓ[‡MHXŒå.:p=üZÿ_ô^Q„å {Ô„y ô/² =h/ܪç;‹{~#\ä€Cö!¼ò±Ò–Þ67†FG(Ï`KZT÷N!”¶ ãJùCêŠoÌΟãêù’,ãm¿”Öð”êëBæç;ë+]"Õ8ÜÍ™(Ó)>”à?’³õŠA¦X8ÛX}ù3ª¿#ü²×?†€mÎw·òî·AÌuÏÇiå»Lw±OSLxêHדPæ-1ñmBÖz(%›.ÈЊc‰ª?o;ÅÙ[â\ÝûŠ#<ïÒM>ÝûWzl€³6³ÖKz覓P‘ÃD£‡eY`&õhÍÒ™ÒcÞ WÛ oñ‚nZ¢4Ê1o›eäÞM*È5€.– ’ü`N6tŸ6ºýQ¹áC]—»wÏ>·QÏ›{0/I@{¼´zHc. Þ½¿Á¤í{cx#3ê¯åìïħôs Ûr¨ïÆôg?Î7vªø<+GÏACR§eµƒ\¡Ò¥ÊáwŒG*/’@ŠÓÌÂA«%â¿zÄTGœÚ~=å›zQ.kñý}ä1©ˆZʽpHüÙÓ<Ã\¹ý¡~\§e|±FÌŒb¬4v ×`¬19¯Ô겋“iˆm9Æô èáyâ™´ü}̼À…„ª%÷®¥[=½Ow§Æ%]*lõ;–]%ðdK JNí:ƒûrVÝ[ÃÄÀv˜° :USΛ[LAL&D¶‹Û†™ðçx#ûTÝvPµz¡{‰YÄU@l‘%·öMð`¸8¹K?ö„Õý­°Çum0%Ä¿§ÙÃdf«®êØÊ|c6€$CT?V]\8á*©ß˜ˆë–Ö«zpS•™)'¦hÄ #ŸU*Ô‚Å&*OP«Ç@Â|KF;–°olãÌ]ÜjšdoF8±ÏËËÈðäÏÉŸ²O7JôHΰû4…¯0gå7kôì+šRÅO7 ¬ÍÁŒa…Cb¸‡á²,GÈbUF9¨D°M©'q±Ð¯Eh¥ï]xÁ³l܆ÕVíÜȉޠ¨7ˆx1Jó=‚À¿œWC¹W ߥ tÓ›]&¸m@:ñ× SO'Ú3A%jÔQ'ªX,ñÛôÿ¢òaퟩQáí?IJ"sUôYêúì+’÷˜4¯eúŸR¤Å`X¯ìM¤¯žÙ]ÂÏür—ÿÆ·%†ð² †U ê›Ìüš{ Åò_©Ü>Å<‡§*°7ÅèC SŽU.ʳiíæ?÷ñg5~ß™¡bW´Å‹€rK±W­ØQÚ/`3¥dvD‚8˜¨¿)’³/•j0² ºK^yo¹¡ ^#W~<ÃÄ\P¸GIàÍ®ÞÓçEs¼ ºï`ë!Ä>‘Ïê,l_:騵_õà½@ã"f·Î]‹t ¨»Ã„sÅÙh™H²ŸÓ¸yð© ©OT±¹ÉË7;Œ^ÅOF*ãL:˜)‡) €4LÛüQUÛb‹£1}ÃY~¶Æ ©P:Ü?W²Æ-nÃuÑ6éð·óâÜH//;O5Ħ\¹ˆIs°aÒ×nx€,ʹz8 ê <[Çæ0_°\O¢6Ë=’gŽ , ú[¨s!‘4(Ú.# ÒQ>ž-ù7us²…OÁê×En$Ü’Mp+äªÓTÓ_ºùÀãʬƒ’I$àKFÆ}À£@àˆ˜ÔËҥţ¶éþRzQGÀÆ{4x )jxk•k£ Ù—ÉUŽÛ “*uvÁÝ*Ž“OS ã‘á;±ÞyC¢¨r/Û—g’J‚ÔÕ««Û×±Çn[¿]se ‹.^'šdf,7à˘ãA Žaô|:bÃOß^îÔã`ÂÿÕè²’ÓÓN©—ƒbÿ>þº2+š !x¶î::Gu̸¸Ý²Àòž;3MškB\7¸´?”ÅŸ>p¾G‘IFXÇwñŸ=JS3>'à> J‹*év08iÞ• &;‹A¨âöjµ‰†éó’ù· ”PVŸ·¾dLã™ßgp>-df㥿H–œd*Š"ÑMã€ó \vƒŠq²B7Q¶%'–{e×…¼ÝøpfàD¹gÿ ï’Ú™üù)«'µIîçöpÁëÜH¼Ê‘€yõ:+øg––»»ÊŠ*<4Ôײø€”].GÑ@é›ËÛ¯®¼Ïþ·EpõÖaÅÚB¦.£ÇÇ{a¯ƒËÏt¶mÏýÚ¬p®V‘:pUÝ|¥ÔV*ä$ û½ÒÕ3ÕT©›sqëBUì*«×~°j“1FÌÊpF)‹û2MBs–r>hSÅ>äÊ,§­6œÛ½ÔnùŽEömnÎWÿ[V"Õû»½Hê—å)Ú9¥Ê­ôÒ®–¤rT[@6×ÖRUQ™1fçxœö\¼&T:2òîÒÃSúWL¡²ÑÄÂ{Ãûf£Ý#ðÖõ™×g8FÑoM$>Á~^¹;F$ÕhÕc8z²¢®áž‚¨.é@¬wÏÿ·P€/KÜz)Ö";TÕɦ5zþX-’ÛFVpÊ„T|°ÔrÜXÖÕkñу%àÔä„fdEŒ ƒQÇ5–GàçDKðžA:7²®IÑŠÖqSPñ’¥ÉX±Y·ËåÓÜ@ ¤Ÿ­ÎßÅJ`Ã7öÝ#æ {SºdÄ· g·X]ÚÎÀ½ä…׉ð»Ïl`&úÌt=æÝW-Ô”V¾J)|4ÚEÞFºH0–ài ÷Ý>SKÍ®áü$ë^š…ëåY¶°Ð%2ˆZµ2.­¶Føµà ïÅ·Q–wúƒ¯7"‰dì°Øçq3¢@íBkØ ÿTý\°`¨@¿ /uox­÷òDfH)YLl¥pÔD1ñƒ¸_jpsîíüNÒ¯i¤J»„o9«äLŸ£œ"4 Q↠Á£ž¡@5ÊæoLŽƒ±üoÜ¥]úîV ýŠ,PÚI”8‡ÉWW'µ/œøôEø¢šé»¹¾[/{uÃûâ1’Ð?béȱvÞÜÍKÖ¶²7‰… ½v;IWèôpSª˜ÑÀ<©#â"ãέž®¤òykkµý_8ƒb0ÏË”i›‹¹ØÔ×ü ÉHF†x ñŒ¿Ä*×ÔIwqÿ 67ü{îEe®8u–ªfÄÑãàu{Ê}êϾ-°'IF£ãÞÔ-:â,ß=™)5ïƒ?·ìbdOé=÷:cË´…èj( ýÎ˦ª_=W–Š„· AŒjÄ"Ÿ:邪ûuü(âgoÛlë- ޼ávDõ <ŒiD=Î7#ûRØY8^Ž,“öäH‰ô‰ö‚‡9xgϱŽ1Ímñχþjæ:B}:vXAó®ØLÝ%ONL$ 2àñž2ÁÉù©á¬ÃˆRpÙv¯8Ö—æ âkï"N•ë=AËgÅÇK´] XÄ;ŸÕŒ“]jw(x~V(»CŸ©Gä „™• (Üõð k†Ëˆ³±-û›Еe}'\*Š•á³ å=Š?4évŒ/#$ep4ÿf9¥î‡°)¾dÈÇ«³+ð§.B|é˜Lõ%çaÛ‡Ê~3FQ—å7ñóU\)_4›ÜU“«cÝb>o¡:™ýÕéïQe5·©KëæN“8«–“Ï2NÍUqÿ¤d¡Ãæ»zYC)¼Z6(ož¥¸©í»‰Jñ˜ÃÇ—ý³I“t˜ ËŠ¦@ ÝO••ÌÈ‘žc1ÆÅÀhu²$ÈkN¥Û|Ñ™”óuë|Ø©ªÎLÐévÚ¶‘âé%‘3òrºö§+¼ 0f£š©ÖÙ° ŽWñUý*O]wCÎs¥€RïªS-N2½æÉ¼/ý¤˜' ¹M ¦…/ÄÕ8ÕwJÖBh35–§í­‚9FÐÏË+ºÉº‹JenÉ“^ĦèyKž9ä‡zNÓ€D¨˜δ뢡½Û#ú3œ®‡k³áñÒŽ`ŒÐ †MU·³À;ªø EÑUNÆúF ±„õyew†sxȊІÐOωI6ü}¤cåÜ38Ò3 PöðÓ º(Fíis¼îÛ)#t·[£ˆ ÕRî±¾¥\†ž5 FajŸË׸( ~cÕé‹" ЦëVZýsoÏ{¸z4¤xK'QÕ_ÊàY&]?C®¨´™t8U»Yw[ôJ[hFV&%'[@°ÒÚa%J´zw)· È'J%ÍOñ|ԄϹ&oÞø†eX¦ÌïˆÛó*Ô—1@RN…L«Ý“£tç@!©]r—nwzò/ ‡VV둘¼f,û^^ùã›™Fät{üw‡âQ6Z”R¿lª™›`HŠäRvÄ›o†Ó–˜bèT&áx´O dàŸKƹï«6³6Ï–ÝB‚ŽU7òõ¤¢6@æL*UÁ ÛAhëL濌³u:i¾Y›@:ó¿¼JŸãnâ8 ›ˆÌ¾xÛ5›îfæ8Vö˜°r„›Ñæs£wäf-ΨY N4±;é6[§lq‰Ùp‡úqâÜYGs‹Ì¾ëû¤bˆzÕ;-­Ï³«õn@Ò#1Äïw´jl¸âiT“14Er´¶¹ÉH¯ÆêMò¥ý¡è2È„ÅþI{x`vë¾Ó¹ÖÁ÷@UBšé‰Î@ú˜aω¶ÂÕÅÀ¼ôMpv9(PI¯ÕrÄ,3 =]Tû*\o;ŠñùoSEºõ¿¶—ºD„ ϥΟñ½¾f¤ìÇóö=SY‚Þòõ€´òħ‡¤}ßÒ™=cÁ­9‚H7S6­~CÖ´™ î[±,$DÍÑÖ³ÌÃ¥_‰¦1£Ù7KÁN ×\R<{MYÖªx$ öWx8B¥Ø{[fÄÅŠ«_‰vqzɇ¹?õOqª¼ûsñ,+Ï£ç>&7°—o§ÿ­—¶Ý;=îr¤4WIpåûèB@“¤ÈvÓ œMtBÌ¢žþÀÉ;d‰³v¯æáþyN‚Bk í*/—µV%1Û…)µÖ+¸Ü”=jµYç¬IM{Þ›3P‹gß‚jrµ<,}¶•¦Óª"~_ª‚8!gÕÙ-¥£´J®K+yÑ{&Wó55ª^…fñ³¶ÇN2BCoŽã~"•ÇÐM¡}ùü-u6²*S§þ7•h³q…loÉ‡å ø”¨ÝTÑÍ/Ä ›`ΛÐVÅaùÑrqÍI«»çŒü!Ü›RaþÒÓÈ =:e_‘U×ãÓfBο}ÛjhŸ¥.n`M¯ÓOúçcOÃQãP«,ï0£¦ðûw q¼ß£èê?'cÒ“†@V±­£iO` ßÓ”œrB?âøƒgöÉ8ë\Í O$e Õåã=úˆ‹éT{ÈÐÏ…WåÞ(>]vpc6\ˆ·&4i8¾Wˆn‹ØîJpÏ ý‹•Åš”ÂwÌ£Mù_@ßh»U/"}ÉûéˆjSaJ’|]ǧžó*>†«a æÇ$‘ÿÌQ RÛþÒy(7¡©4©Û³.¿Q»sæô¿eOŒZ&Õ-œC#:)&9Vï…úté)²ŠRz‰"r¼ÇGw¥nÂÁZ4…ØŠÎÎi*2ÛÒ.V½8­ÐZ1ƒxbÅ‘líé`¦óÖžT²ŠŸ‡Þÿ Ë{)eX¹+ÈM-ÑÜÖ²aAm<’E„}Œ]{\·M¨à5¡×-D2£Â´ô¿×{¢Ví7­¾,Sx´0ù* •@Ý•4&]«¦-3À’ÿ—vXnoY£ÏER.Ì#A4MØ“ˆ?ujAɆÈùñÌ 7†{u$E#_‚ÐÄ×Zo>0¿)Îó6J^Ѧ5”†üûbǹ(ÚItDi—"Ä6EÌHâ°î[šÂãz":iç5¤½?*è,] ÉGEéæôƒgÖ½…:ørúÚñ 4å#ò´ "‰|w¥8°&ñö­™+r|IûbƒïOØPËD.‡íd\»Y—߬ mÖ(ÞoÈIÎ €˜Û9ŽÆ'f½W”ï$‚mÉGI6îÂ= ì£ìÀ¢íStP¢tHÙ,_(÷©¡ð/îSëØ|ý’ðœüm#¡Ò¸Ëá% ϸÓàb7ºWxB¾óJŸÙ žipMäúûo“äúPµ½(]¤‹gIôBä9÷–ÀИ°¨@ЪŒ0ìë;CS ‚¢Ìýì¤ Ì[·i`§ÓåRns•JbÀœ?žþæëÝEd_§ZÃ7»'j!­Ë×)—4ÉZw`}Ók©ò¹58)¬‰ji¬bkLٻǪ¾ÙFNÃø ŠVÅ`cÌùŽ gŸì‚§%ðü:õth½ÏÙÙ&p c N|]lau]Q=³¢‚Êð¶¦öZæfïÅ¡»³9þ¼»¶§dò ¡ëÐTfìÙ‹½HnŠ‹»”pe;+‘°3ËÖþ­*fÆ¥/d'DÆôñ[:º‚áv3ÖwªTŽ´¥QÀ5à‚ç䡘%n#“r$Æ¥Í*ñõßrðXBltüÜ›RóTrÛ_Ñ&Qpµq žðwéPasܱZ°ôÍ‹É8FÌÔ§4°ìˆµ% ±ÓIW0~ý7”úˆ yâyAÊjBP 嚥ˆ,o"‰¨3œ´}ÁVÃõæ>>;ú}X]~¥’*Ü™ºØqDzÌ $ _„è–7•#BñõH~'ç£nß§ÏC ÷õï/ h~—HÜöƒ6Ša]H·;ÂðïmÏŽß<™ˆï%á—‰oºÆ4å!÷ÈÑNSú[%´âÙFŠ…nœW b@°lm.b*>cz_“ˆlÙw:´eáû¾T–hÙŽ¦ SâÎ䚇®BO<ÝXÙã °z'áHPSKþQ&ƒó`@8¿+±7Q½&¨ÈŒë©z oI¾Gîg}KJpàt`÷Ò™‰™wW’qõUoÀaΚ|jÿ›Ú¾úf‘±>Ž£¡¬«>¿Sã‘Óà…[ÕD*}q,$éU&.´‚n¨×&v¿Í@ÈZ:ÙT¨ nÕÔ¿ïl–ûŸè>’BçRí,hY=¦?êë³ÅÈJ3ãÐ|å~»:ÓÈÙ0ü(e¹8|è5Ù™‚í?–”"²ÉhÒ@xär¦ß1ܬPµ?Šé‡¹ÔÄŠPzGÙ5_(i™4ÌU‹Ñ1âÕAÔ£ÇÊyšë'P£_¤±LçbÆçf® š}i)¡ïhWþ,6“I_/yèËvÃá°,­A‰ÇÜ §˜Å€îÅX0sy+J¯·p§²x+¹í“fÏû) BÕËe€|Gk:kòÜ”Vã{^[o!ÐÜúFÃxE¾KÂÄíK—"¾îªÍ^ „ µjJÄ:å§ØPa£÷ó4Y’%‡ýœ¯ïUÝ¡¼%ߨBÏŸê.å±;˜Ý1n9©O°ÕšþäåvñXpërôX®²|Q ó*ü/‚šT®G1 °}‰¶ÚΞ}!Á:„¼êàGy÷üXô„¬'_fE7ÊbÅûÄTcáM!žZQ‰Ü¨™T'ú·È±]5:VÍ#IÜÐËÜáþÎЗٸõK’ùð#Ø.²_ñH=BkmЉUøj:ïÆõúõÍ´ÝÊ@çw ­Ó¥²‡«¼`óÕ|)Ï—ªAj nÔCR¢:ZL¯”QfLWDCÍTåvŒ+K¿3ÑË$.«J¹ü|´NNòÕCÁb§4GyÏ‹CßÐ/'0•šh§:MC]Ûˆ…¥Ï¬úÎ ’3Ü”¼Ž=g+þM'Ì‚_€³ìo™ mxïüÞR¤¶ CäšÓ•;½¡Ê£ue¡Y¨Y¡¨Š›`[õ®hQCS–¢²"5kÝn “€úa2L_(D×IïÊ,¤Ë<òÜ8éÁⶆÓÐ~œ¨ÜŸ— EjC^VÌ…žè—²)àžÊæÇ=«ñý³2·ö´Ú†éÁsIˆxE±4âDzÀÞGù)!aJSÙ<¡‹3l‚åPØ–¾ÍO³> ©ðžß®û¢ Ø‘´I¿#Cã™tªR3èî:a¾‚4JÞ,ª‚õ½'ÐìªeåÃ!=Ž"ç õõìU4¶†X–Íñ€™Íþj\²S ôHÁ^Ïw‰Q¤od„àHJ–"œ6ñÅï¸ÒK[h¦<.*ƒ#›T‘9ÇÈ6¿¬W´ç#øàq‚’LDÒ‹Z®ZŒ-iZõ·Dc‰—©% îC1¨–å\ù rñ©OÁ ÜQHG "P~#{ýŒYŸ£¼£žf,‹ßSi$YH;qE”u»äTuf{Ÿ Rpí’ËRÑ× )ä¾’ÚÍ‘óÆ|‚aâ–}Ðä“—™™K¾:1 Bˆ@žíÕœ\©©{.{øS—»=T‡ûp|u¨ÙžTwIgîp‹'üð}¤uaJ£·ˆö_Ϋ·¢$ÜÀ—/œ2·vµ6Aì¾ø Òª;]ÜAJÿúùæ%BÒœÁÑñt*/Ó‰{-U~µ\oÁcþy3E%†ãDS¾.øŸþUašÛ¤úLìÓÂǧ^Î]&8ÎäºêOåðL¿¸%š×!ÓÆ6d=HÚ ŠºÞrþIzu&çëqÖ±øø‡áÙ½ÖÁþªŸÉâ<…EǶ° Öˆfi°AÞù]¦Ð]Íx÷îÄÁ¼ŠKß2 n˃ÿTj-«¥‰ °¥ÓB Q¡u…ãÆÎþYÃÅmaÁHß[“x­ÿàŒþ¨åiUû’&(-n#]¬º“0M¾ˆqÂ[T@,hþE”uÃÊod‡v¹#0¤ †"Ïné‰9|ƒßbDGÝ$+Dd;+ýÝiq)-O_­Ø íFŠrU 1Òwÿ©SõFq»‘’ùíÙÊF2ïS/}rô0ôA®@òq}ç²gÁÔø]=Ò©L¯ÜYÚ`½]ÎG‘Ð=lD†tßþbÜwFwo¬ŸÙsà}ðéï„´Õ-¡Ùá=Îä:ûÆ|GnûQHwK¨7TPÛ]¬çßLJ½üÍõZ¸ÐP†ÕΩΕޚ~”‹iŽG' %èfp§â¸$ðg²O Ÿ/7‹ÝI)¥ƒƒ •ˆ3æ†7µÓÓK‚ ¬V2¥/H€ê>DAËs«$G¾VrUù2¥h÷šA®ny/@]«D2C@íôÖS4Äï.é^å³›”Oº2ªdÌs4_È(ŸÝÌ鎄Øèùï©{vÖ(,ËÆ)mÞ ¯l«  &áâ×zÊÞ&@@„z¬ùnµòxÞ£>c0m ¬7Ë5IÀ^‘{ý ¤£:˜ÌÒJ6Ä]³¸bŽðmèŒ-™1‡ê—fÂè*¤“3pfß%iaY²*z;˜Ž.ŸíúÛC¡…¬X¯môä®ö½SvXvbÖ€‘çjž™ÜUö.Ñ©¼åØùœÆ]˜pN…ÇÊðWÍê5Ám’ÄZ·Ó¼«W<Ðy™ÓAy¾öe¤}ŒÂl°UyüÈ~U±Íƒ¤7‹qFW•ð"µ>DËKŒÂ ã³› &»[Sc9£L??Ç[;é;b4Ö+"Ž1Q¾H| É•±‹ÓrÿúÀK@wú¿¥€ Ô´³Ü z0™‚sÓbA"R8”It'èö{jï ˆå ÌR Niª›4ObC´èÍw§R¿G×·,¶Ô—r¥º›Ê£û{"’}Š‚Ær²voz¨J­E1^ ¸f!rØËfDI;™Ð6'%{HÏŽvä@_‘roá½#úÀì•ñÜz)nä@Á°«J¿ê&’ªØÕ°>P(t}ìýˆÓB•Âb=T+Ï?%K芖n07¯èSo³&—ÿ{EâE¿–áXp½¼õtšÅ§›d’Õ[}¢.Ƭû,NŒKL £¶ëœZ^å†45˜ïª«»¨˜ÔýñoA÷5ò²¸Nt0·½OŠ…Lð|´¥·xÙ]id“_{ø"³Üe/N¢¹rm^(ú–.ÿ)~eõ@'„°õ‹ìFE.§w%+«ÌQ&WÍ9ð¬^CÃÛ½y¡ÅNSaÕ ¿bç©z‹o¬b®C`á?Ö^’¾_¼¬þ{¶‹CËî‡u´U±ø9Éö…VèMHßv¦¬™aâšÃ÷§¬Òß*'¨®¼`w”¿(7æO'Û¿]^—8ç•­‡Ø¡#Ô¸‘+w4Ššu²ïV¢Ê-©nl½sxÅž? ±œ·¾9¨Y†²jºí°».‚"Õ?Zó `]©À9ËVi Ýò]Zã´+kâÌÔ«&ðÿ$%œÆ,‡™à– £/•ËЦ@Q_e*ó³6¼ˆ`Ë=¬ ý]bˆ-4RåÜ5iTIES©AiƒA 5Ü7…ˆu]Wè#è{ÉÄì2ˆäÞÚÒ›Ü|«÷L™ðatOµ†‚ë¢XÐÃ,;)J¬’|Ç–G6²);!ÀvgPo–,äã½6`÷ò¨kÐqôãH šÃ4/{gbÝY) Ðó‘ëQìDÈÁÌQgðٯт<4+»a-Ș !Ь=%"§%sýx³ rïf“Dùè½@ LŽæÙï§K×ÕXðˆøª„UÊW;Dló´€Ã~Þ˧¤t^È㽋$¤T ‚ ƒT{ì, TónÆQV½èpÛŽ½á ù¨ÈýgÒgôv ¬xvõgk Áëyòõ8Lˆ/ŸêÁgÝÞÌvˆ¡jLÚ­XP3ÀÖJ tÐöæñþ΄AuJÕ økqd›¸ÃÊ:;PíŒ@–°fT‡¼ ø ­m”ƒm¥”}›"‘"À€éɈò;VE ~ ØuÄþWònñ¸D_.ÙÑ3ïîB}êêtçuä3Œó.uºh°…PË8.’üëW#9êPC é)$ü™PN§]}æx{QÏgC‡UŸ˜×—ÈgÒ;ã®ýªºò›<øäÐoWò’Š:QáeH†´Xø~¯J뼞`ú›>¦:hõ.e~d!ÊGA'‹c…¾àòéq2c:%H™ý2líÌþf©ÏnUÄr2Ðâf{JÉÉómwîX­õ`ßÀKÆZM2ê¦EúP“ê°Ñ%ÐÃ?‹¬ƒ^Gš‰ã\ÎzÛµ§ ¹B.ëŸÌ øA|0leö¿ìåÂUNã…BÔgÚí‡i¶ âeãYxâ(ÓÍúQsåý’´½4H¯ù›gª±ùízö0ŒŽ˜«| Çß„U‚'ׄ¡k&âJÃe©ŸÑ_ÊuA¾„7LžÜ-0ÁLé4;¬—PÌ×¶/6èÛÀ¸éžØ–Ý¢:4Ex"óiŸÃÕXòÖ[‹GìZYëoÍR 3âô*JÇJß×Eg Â)­‡¿ÂÇáØ&ÈÑ%"¬-` ¾;þL Àn©*dBÁÁ‚p<4G†VSå ¥…ë9‰‹½ž×:C€ä²›äÄè›Ú4ÐÄÃê\UÁœï‘ò [ÉŠ"ƒz^Ü/˜Ä÷g© ëx@ÒÈÇvSõ™÷KÐ/òk]ô˜yÇ¡Z¡Yî¿Ë1ä™éÍÁô(®TîX¶|ñ9QgØÃ.kfŒA·&χ¬`²ý×] <›ªþ$ãš‹jX†ÂlY1ã㚸 Söé<Ï3¡}fÑk È`´×!»/ñ1“–°ÚÈ8 p¯¡Þ#ƒV {wúq÷òOYp]ãs=ž„ú9äö|ñ  pEð`59´-‘WÓ°àᯌ@Ä7’(t ›šaŽã=Nd*³±ð„äñÐÆ?4uoÿ¢í~N"¶c40Áç?ô&iC '`«ÖR— ·Í)šSú®q8ß<}Ô9QÙ;$æ ^…F\-ƒé¢Zð¼í<"ö34 ¹¸$g¥¨VÞÊ98Ø“0…À91ºŸ‡ßܼüEº¶0óŽ~uœM.ÝíF3aAÕ„õÈK 19ÈÕ]§²èœ]:Ø"+|1²ìZ1‡¤¥Î¢.Ø£/]€-¦Cž8¼&´T‡äHò§Yµì û¤ÏYw¤ÄûãNÄàÅ«³æïçª#âªS¢#]OIO EÉZ¥_ ¸»³"}@~ §‡Pb׺W©]]wžŒi›¢—å‰K¶S!ó—c˜Õ9jä“a›¨^†‹üU ^[¯gh³È Kî"¢ôâ’»¿¹ êv¶k)Ÿ5¿O™ÚØÏ4;{=Ïù§Þ&¤‰ÄgB‹Ù>ý=ÆFÿ='W—ÝÂv@N‘:`ˆ_évK“: °a<¬Áõ™Ò.ª¹ë#3iêxVÝlfø êRŒO0gÜôß¼#&=VAK%vZèùj² ­¸¬§þVò@X¸Ã·Ú³!åIÔ*óWšŽÔLòZQ|Î-Š€g¢ö»ù;%_uUcúîÊ…—4ù׺"š~o¬¢¥MG¾:£uÎê¸ T»¼ÏˆIdA†—'Z–êþmá»F¹Ó„,½o<Ÿë€Ôo§¥›ÍrduÞ$ߪ¶ø£1DÌÏŸŒL”ìÕH[Î{ òJ\=;^“|Ö¹9@é&ª v3wª±‚¯zÂØ¼é`"3*ˆ­’ÆÐùÛíÌýF ÷§?G2ö [k±NzáqsZ%,Sç+KÂß×/Úä÷±;Џ;‡QL¨í»‚ëÌLŠø„›ƒ#J‡ÕFwCkÿÞ¾ `úÑ*MóŸØ-SBa”~Y@ƒª³ÿêeˆ9 ÂW„vŠê mé îeàvi]1ÙöWÍ“TœMs•´‹–K@°ä@[c'Øj exå-¯' ÀøØÖÔäpH8Ì;İдªãrÙ¸‡x¹Kå)x 4l‡œææÔJ/zTáèaô3…ÌÕ-A6‚ë('çUÝ¡¥n#T½ÀH¯{ÞŽkîv¨oš ÔW_¢’þ¥ä¥&²¦Ö1òËØ¨e ¬?vçGç/ƒ3¹C~@Ãà¦×@E¬DÒ0ŸýK@.ضK‡*ÞÙµíX½™úørTƒn‡±ö×e׿ ÷(϶WjƒÕM Ëë»™‘3´sñÖS4%O*”æçaa­?xÑf*’˜ú¨u¼ Ù|ÍXO‚ó£¶'Pÿr°Û„:£§¿€ÖHU×@‘i¡ÕøqkwC{Ÿõqâl9D“ƒÉq+džÒÉO8¸¡x~ QO&¼ %…Û¸hGõžk÷³çßg/æ3ð cdοGðuœ| ă ˤž’›³–§÷~ìÅ?•zë‘ µ?ŠDöEç·Ê4 åyQF•щ·‘¯Kg|¶Úßüvt§Î9‡‘öÃ2ET¬++ ¸/C}S^.R•ïJ:ùãâhÊú¦­’«–4–(a_ÀC/[`ü—¿‘Ñ»q¯oE;Ô‹+9Ý€WÙ=a¿zPç f¥ë–¸Ö2oTÀ±h9BQÀxa%B)2hX-vÌÈ0€.,,X@p‰Øh™È)ñ꼬²a1/ÂÜøÌ Wl‹}O¸ç(ôüñqº®(”ü"9 £˜ ma´®,S0˜´ÃÈjòjÒK„ÀîgÈG†åô’$pW5ŸDèäv´|cøºd<O·Öög–šJ‡æ—˜›ëÌHj+‰äñ,¤Ëí¯¯—ÁgŒ(Öò)æå¯Ó«鉇™î2ÚŸ–=›¾çKè맃kYJóø¶h2ÐÍE={ÔÇþCàt™Vý›[U†ûixŠAÕ÷t•:(· Çg´”ØÕ'Õ˜®¬ó`TVUªj„! u’§Û4ë¯$7¬iÄ]«ÑÁÒ‹ƒ3ÌÏvÊ×hóŒîœ³Ë@éþãµÙè±52„Üuu ïF0â’s{SÝiÁŽÎ¾ÆêI׉ÑJ®6 ÇùÉÊÒ‰¬©ÜœH¹4ØŒåÎ6T>,ŠsMLÇ=QÐãBRNg›%£Ê„sl°zrIº¦ý©z‘dM¨b²{ŒÂ ¤ò±ÝÂÜÚ^Ù(rØÉzÅUi5>Å– …êæËhy2ݦßÕËcj·n#œyƒ²é¤B·±w'.¸jÑ|U´êBÛ\%W²K•µ8À‰<‡‡&)˜†šDçš?1XW•ôq'Í‘ˆwÀ4 Š@(“ƒn•Ê+>Ù@T~•׿¸Aé…dž0~H~Ô{iÑØŸ¨ÃCޏ^Ï}1X(¥ƒÏï/èåà»)T£i~Nêlþ¸2°×„â/¤û½},ß'µµÂOú¯¾Èsç¾)öoG©ù-Ö,r‡ÎôY拞C ÿ-Ük+ªµTü·€ýÖ³òûNÉ·Nå˰ˆ9?  1r/æªBây;|¸”' `8Õ%˜œW(ÿïTøUÙðM9oA˜i–dzÞµEaëgØÆ‚»¸ËßK°d‡Ž”x5S_OšÎõ¡^Ä,RͰßek({¾@㱇uÞufò‡7›$œÊ#†”õr9îç~j’úÉ6þ™¹ie²ƒÎzG|jÔöÎohT/HÅï°“a™ž°Å á¸mQTy0ºJ”¾Þ6Èá”a‘u›®'p‰9å‡M²q!Ñ ŸÞä*Þ–2 3E€ëzÏâg)Oƒz)œ~u/‰„Rþøm¤ ÍX…ROÑL¤¤Vµ2¬ ¦ßnoÏnÞþœòÿešêS¦Ã ."ÿ²tUå%3žKUO "Ò'ù¡bAT/ÛI‘·õ×zÅsRN!YÀÌ]øÎâôú±áÌs{–8æïsZO°#ìÑ ö†Z¥è,þld»jzàK|º„ì:ÈÁ\›»ë£š},wo¤Ÿ®¨‚u”œ_+I—Pwq ½Y†Ì<¹¶p~¹q-l1þ¬hÒfãIN¸\ÖãeΛ™é‹”]‘W'ç–¢‰ /•3kÍ.(ú.„@Aq0SǦ4â‰1ZÌ—ùsG,¤t£jyG&y“NÀ3«TbàGÞ}Çuñ–hWšÅbKô*rWÓÀ{l„ù×Ê;ÚùPËÑ«õz÷ü.Œ%`ÕM:¢pÔÙ(ª¹@+Ä|t­¿Ð ‘õ¶ä%„iL¹kFx×È7Ÿ[,;*EÁá j3‰.r§¥šå{ÉéŒ3RJ3†â°P:Y¨aËMÐúEÌø ñí±DïOJÍ,ö|g¥é y(ˆY¼½œ«G ãÂmˆýbrYÓ§°OuÏ ÿA¤‹@Ìá­ˆGÅdz˜v­ÅKt? ê)̲ó/r–f=€ª{Æå€'VáA¶§Èàél¿u~]ÛÊ…“úݦ¤¾ü)´eòÕ g„§&µÔøµ¹ê¼û™6î0ãÂ1å:{uÛ'?ßE\ã%D vƒ¢õjê=!Ò€Ħ¢6µ¼ÍÏ+èžvaLýi¥kì40æ! ݨœì[,öWx7¶@̬lꥧIÄ-Rç²€H9Özø­OìJ>˜NÁH8}öžtiýºÞÀ¬0³^-d;‡új.VU%Ç£¯ÄzU²(’™9•ko¶k±@îë+·È’(~üÿ¡ —Ý‹+ùÁ‡oO²«ß4Ö÷áÀÍ3þ-à¨ÅPÑá=JT ÁLTÀ™wðäq zXrŸÕ¢6ÁÑ5ɾѫäãî$ÚI å6%`ü¤0ñt~VB6ŸèŒ l³q‘C¿Ú±!AãµkGÈ7"€Uô/”}'ƒƒüáb^>FÅBâQnž·Âÿdqt¬%w‘ÒËü‡èG=ç‘Ù ¨qu⟇¤ ¦3UìOÞWgÓöA×ÍœHU˜Âµ…rrP™gµ€ä›`ÜLàÔ^S’,VйÛaÈJø±x÷Þté5J”’ísŒ#’:Wê­f^ûÏo º5Ú` bÿd÷±”o#ÄÞ æ6Òs¶uÆ[®Mkâk‘ë¾<*0¼î&ÐðÂ*ï PçÛ%F|Ô ƒ,å0\ÄOѳ[{Œ„d þÿ£§{ !ò£œ8²ÍÃrÜŧš…§Û(ž¬¸9+|5xãKkµŽ‚nbÝ ÷Á¥ÀuWÑT…Åvu“¡¾V³vßETlc°á®jóôWXL= †G>©¼t+ˆb—½Ö'ÐaTNÀñp!ºl;ÈÈ”ëÐÌvloŒÛ³p,¦>œÛw'-m êÁG€äÐÎj~CyhQmGHµäÅŽ ô-Y‹;º{+˜ö(ûh»ÞXþÈ\Þj-tÎÓ$>Ö©ûÊÂ5k”ð%ß[?•0÷ hþÂü¤Ö€'±ÐéÞ ƒf0„žv±<‚Yîܱó pW° °f0Ë­ÈENà-'«¤á­¬c\È|Ÿöº02Ô$¯ iâ7yvÁu±SD¤ˆ © ðN]ªoŒU·Æ¼‹¬Q"ëÆ×-½§« Xb®‹çÏ$BÌJfé*¤lÐç(÷]Á®î×ãÌ.§†¥iˆãç«J¬kÏXþ°ú¬$ RîȜ޼kÓÓ=2…§ÂD€ÄxônÀ”`ªúWZ%Â䆸?#pB½$X"ý.…N1Ï.á) Ï¥÷gGŒ8WÖ½¿b‚7Q‚0¬)úûØÁ¿_¬„Ü®ç]íjs±9Ç×VûT5ÇÄìš“q™oMk )išß¤U¶ö.ËÑ»ie*Ä–q©ÞèSî•¡ø?›§L²±VÆVÂn«æŸÄ]²ôïÃý€úÒ8)¢›aO²6o€æÂ® ÆõÊÍÒ&®Ü2ÑRæÃpj‚þŠašŒký|øã%Ñ$“®SÒë!."KäÞJ‘Âñs6"<÷<©T /Ä(}Íò?{á·CÿZs®½”èh»9xåIçA]Mjõ£ìŒ#£Ÿ•ûú Q^À—µ:,ÄÜûšÎ9Ë1ªËgÂAt§}(êÚi3¶ cJýAˆç/üGÝ^i•xœ5M'xå¤fG 7¸ir2iᢪkçP\/‹:'~+²Õ)¨x»‡êªƒ?/6:! =ª*ãÃnŒ‡ùy(»ùOò¢®È½£©¹„4ƒ¤7¯+MÛ_ÓOŒÚ‚¿™µ –ïÄÂZ˜‹%‡¢èƒÙj§ß %ÊÌØÆª8ÎâÐzÈz‹\½žík°þ§mg˜A„êÅœ—¥ý°<Ýk¦P¿7qÅ虽+W[¡²%™ŽQ-umfµÜ4òiê~.FÌ)²àRi{E  ƒÍß±^¾Pì¼4W• ¡ümú8íq™{µÕåÉ|l $ 5!Ì"|éùÃLÁ”>•-UÖ ý– bW w…Jƒ ¤éX½L$úÃÆM%ßÐåOïÏ;XIwè­‹ ³°7¾!iÆÊxb=”Æ2¹Ú&QøìÏ,haP+Ja!éÖ™{£ÞoNIv¥^´´¬PðHÊ)f¥•¯sàBSêú€Ê}ktÁ œ†[Aú”ýZ<½ ºi<1«ih°’:Q4gUmìÿa“¬“]!c‘BÉ(”,bÑíù#ØI:`~Ó±8ܹᕕ±v¢k¹Id#t5ŽbœÓζ!®K,6s£ZP$-ÛJ䥋5&Ù=ûé¢,¬wDLª+Íêp¾‹ei®£„Âuͱo~Û„æµRà†Šnbý! [âú³S3zŒìÄ‹6A Ïx„ŸÊœä¼•ºÑtå@ãœk°Ñf'KŠ9LyôP3—ßè/Ñ¿a¢DFÍáÿÎ7ú¨OðƒéŠ}Yg†‰Q5®ù*,|ÂçŸà˜¶Õms5?ÎenÚk:ú]®Änšf™{'ý8\ æ? ¹i?M2º~{6ÑLN‰f•te¥à å*“üS䣟öUá# (ºQLÕ,÷Œ•b¯Îœ!s†…/”)c¬›z²eUf‘]Y°ó¼)oGubÕJ÷#üÄ= 2FfÃôâ½Ãš½òÏý¦ 7l'‘3îù9ÑÎÆ+f Dy›±Fœ•ÝghµA…(þÊŽï ‘ø\Ko€ .’G6©ŽÅpp¿á%)1­{ž(™{›ã,—ÐÔýqÒÚ¥e~^øK\{q¯JêƒB×M†Oètt]nÐ@€¢‹rñhÈèªUûá?Ãs×?Èe-Nû¡,©s—)$ýe/#ÂfE¹€0Ö3¹CýÝ ›&Ô„Í{NÂÀIü²Áº¡ VgðÀD FI{âÏ9%”¯ 09Ç9»íÎYÒöÉ™Ÿø5ä^R5Z¼ÛéP¸7>t/Y$eÉH²lã<Ȩ4æuˆ„Þí•Å#kàÏ,¡26°äOªÜPOD Rû%©x–¯Ï3“Ñ’:";|&{Õ~{_„ÓÅÖÊÑ@½‚ÜÑo?&­tžê}\²Svw–˜üà ÒöÒërd¦†îHBx£ê Õ%Ù¾0 Ð<²ÑßH ËàëP]Sÿ`ÿÙ=xà–“€õˆmБ-zºÂJòÍA×B®[8BãðoÝãR£Ò³ =i†A'â`| sÖBÔ‰Þ'‡Ô²R/NŠáÒŸ¶TÛÌlЭ6=DUh< DcZa¯‹…òÍ„Ÿbß05Á˧*“®Õ _ŸÂe a„ŠÙ©{Ý40  ™¢vëò#øÄ¼oI ‰Ë`¢Âí±þãÔS=Šû™…ôÞOƒñ)-v£Bß»Ž÷?NÃuù ›;2Ÿ}~[j˜­fˆ®Ä1nvF'´œ.zKþ¯¾¦¥Ã©&è¿?Ocè͸¾¨”ÇêÎl!ް6}¶¢N¶¡Ù¨¨p©O1ëÅÂö g¬w»‚g°¼!p4Ée¤¬Ý3~÷Št•Ì‚DhÇ•Uú|½È½FÂ@&Î÷_Þ ßéºïîT²Y•lŸŽÕ€ásÇ·(]ñ÷-¸Mú?E³‚âô„ª]— UœÑÍc±‡Â4wœNÓ0„-ë‘™2 Ü•ùü®íB¬dš´^-ÐÏ®ãÂHþ] «³Hw¸BhÑÿStz¶>Ñu{“|µXg`‰Úlø×àø_ëo…áó˜E£eÛÑôßZoõóeL*FöìŒC$`"¼qºóp!˜…7Y^ûRÀÓ™Eel ­@ëÞÅÄjæ5¯^X1ØŒ±£ýÞèr /R“9ÁGߨɥBšÐÇfú:çTŒó)=³€ZꚢðÅØþ±.—Ñ„$’f‚2ôþЉija˜1–)„“ cqV' Àls»dl=éõÜ“0™'/WF¨óê…¥oqÄ4a‹‘ú”—=ëþ!Dû+øe2Ž™¼N–ýëbUú'NnrM4íqlÀUiŠäÈ͇êÞí‘ûun&÷Ê\‚³Ÿ½éûÔ,~2 â!6`l[fQ¹ªƒ|Ft·S š2ÎAeìeÐuyÚåîŠÀíøþ%ìOÕ´þXJqÎ¥fu8­Ã©]¹”õËàTÞlä3¡ ÓÕ'dzb¦ó¼{ɇ‰/Ñ+’Ø¿@-ÓšHÛÖžºPºG&U~Ð@ ƒDg Ë>róöe’YÑå\ÓCÙ ¥‚àR¾ŠÖ29]Èì()j´øNÀ¤” i]ÀðzI¿äž`CÞ ‘<ß²¿°ÂØä2ÙnÂÞISû?Ø­8B8ã8E¯ÝµÌŸ~-~ gL"HªÃÝÄ«ýçü-§cXÚï뜱ýŒóª)MþVCŠÄÊK]½HfFÊ^ª©#¨SëÇ67#i.Œ³°¥93«·ætärmæ1ƒZà’€¢:ŸözÕø¥VUb{Ñàîš·knñýñ|?d¿¸uãøìm ûÔ¨Èên»Xž1šc›¦®úRð¶ÓÛjZLZB ÿ Ã£À$ƒ¹ÉÜëw·ýÚ¡;^ÅcW Úyš`9Ì  °ðzHñÑ›mV_Ýz!q|Ž^v(ô<ŠŠ|Á`Ñgb(®×W™2BÅÁÔsØÖ# üJy}ÞÙ¹û¦—0tòÞ-O]"øûJð=NWëðÇ3 ùV6% œy)#°«˜ÉÜKáÌ—œ8¢«D;OG•õdWàêûã®9Šå÷ÓgÝðPZ´R*Eò—£U:MO/ÄSÃZ¸ êÕ ¡€í–!Àð™È³=ktŒ&' èLïÛ,Ì­<›­&3b£Þ¤ÿ§M+𜠮³<‘쥭֓Iù@cÈ=šƒv´Îòĸ‹¨s²Šj#SAÓëEû¹\ßÑ^<É@k}8gXÃWk¤;·’[æ“üî)ñ„ÒìØy6ÿ9³iËŠLš7fœÖ0¦˜AzÙÅÊ»SÑšŽ§MJÚ¾ÝñZ<éX!<Ñ+âÛÎ^{üàZ b?H*›à­ hTOÖ³ó —±ý$T¼T°;™Ì ÷ÙŒxŽWPKõÆOT-÷ežªâç°rª8a®7°‰CAòÌ*I%AûnÕÙh/çÇú$̯ƽd¯QøätÛËAµxPq‚5ÈJreÓ?Úbœq^äSŽÒÜRiOžˆ ¸ï‰2Ç¥ ¸§Ú—\äÌ"dJR7(æžv9JP·‹æ’Zšu)Øw²(˜k@.ãUÄß‘˜}Æé×Å2šC(û_jY> stream xÚl»spfÏÚ.œÉÄ6'ÉÛ¶9±í'¶mÛ¶mNlÛ¶'¶¿ßÞû¼ï©}ê«õÏÍêë¾úîZÝÕk‘ŠÙÚ8)»Ûié¸JbÊÊŒ œ¬:fRRa “¹­ˆ  4(íŒL&FR€°­»ƒ¹©™€ÂˆòßF€ª•±¹µ¹@ÕÖÊÖÅÜÈ Àãââ"àâèLçàÌG÷O’p2LÌ­€a9y IYq…¸¬ @ht0°È;Z™¤Í€6Ž@J€‰­Àê? ÀÈÖÆØü_˜éþ ÀÆèàô0[k€Œ¨² ˜œ¬2@T˜^Y``c –ø'ÝÆÉ‘ëŸh ‘“Ó¿ª£8ý¯deð¿’áÿJÿëupûDÃÈ067rMÍm`èÿÅ›¤‰-€í?fcg»ÿqýÈñ|Š8¤Mþ‰v¶²’5°(„m­íœ€[c ƒ à_Ü»:˜ÿcùŸPks+÷ÿßàÿ!édð‚6¦ÿÐÇ𓹣˜¹ÐXÞÜ龜ÿ1«ÿ372@csgëÿ¤ÿáäŸY5¶µ±rÿ?#þSʿǣ—‘T“QРþß&ø·[ÔÆÈÖØÜÆ äôŸÆÿkø·[ÞÀü?ô?Xþ§£ŒÿW—1pr0wh1Ðý«Eþõü¤ó£„„lÝ*lΜÑ3à)ÈÊ/˜¸Â¶®lÒFJáM»Š,q!O]žîvVq8\õÀsIWMÝ(VwÇ&+íË«Lä\U&¸ÉmÜçQ+*ŽëNPƒœ8…?Ô5{ãŒþs|ûÕõ<)ÍÖ»<{¡`lÉ`‘4|k¤x¬XŽ\QÊ5 Ɖq¦ƒmû|íjQ›ÎdêQËe»ÁÓZ¹Ú*‚¢µ€Á–Ç )Ÿþ wn†<\ôÔ+3L†+ —E?Ä[û$ûÃðùWÒdvf€Ö™8‚èLœE~x‡$ G«ö^gÖ{\ªXèòb‰B½»×³@ÜAI1²t'xÓzˆàÓœeÖgØ5ü“hé™:+„5vµ­Á„Ì·#Éûh¤K¬VǦžÅŠ´YO©£ŒE5'VÙ!Ï¿Š”ÞZ`ç=‘|Ÿ$Ý þžÝ`ÞÒÈÚÎJ1ã 2-dÙ+l¾a€FRN<»£G[ rMÈqë§ ÉX´‡5kd¿kD³ëP]Ašˆx…jwˆ6âù—ì}Êx äOé¡…é |÷…’1aúßá¨rðžu"xÇAöÙSYβÌR î->žÌ7M¦°®Ü}¯3D˼û‰ Ûq*ä Nƒ«"$ë±q±EjÂ2ƒnu¦édªW±uwíˆñ}j*±!l ™>ÏùDf­2A¢$.N«ÁMy³]ô:¬„Ú“YŽ»¢nXG·Õ©>W:OºÃkÏýI÷˜/Õ ¾œH3°°+6Ê„3é$M €ü=Fæt_˜ |kg‰HvùÝ%âù°åظLz¢”\‘Oè± Hóã©O‘†¬.þÅ ÀW›ePºiäâÄœ¨Ð눒õïÒDš¯J稿ÂòT¬ I%iƒH|¢©vð÷ŠxJŒÔéÒ*§?©†'òb‘§ 'cÍÍ@™›ßR—…ÆÑBº§òG?,¬ò:$+(]ïÂUj2xåHM±~Þ>-ޝó8òPUO6E–M›_­¥Úk^i-ZX°“ wn]Ý’Gbúi2>·çd$ýî©}÷©îdƒTÙéñ€s]U€ýÑ®(J°ÈÑsiyjå_¦$‚4܉nèÿŒóÓõ“ùd´ÎBäµQ¶FÝ–Ðk?á÷u:gë1-e‰d÷úîäaᥣ8ÊÔ½lÚ>|ø·/èLZ¦ŸT@Žçy5§¨û¬¸‹8¾TIÙEþ¼KBè8¯U¶·5ª&B8 8Kµ{gâ&Oõ:$åç™æ¬Š*t5ÖÎTý ׺[ÝÄr(ÿ«€ÒeªJˆžÉ#ríå@ú:yü\Ø|ÎuÞš`O&Å¥uNªÏFmíuíÏc ¿IÛà’C]Fùë´Q9¤4_®'ïú{Mwûˆ§NÜëÓ¯A÷Šz(RóÁGˆ]r˜zôö– Ç”¶›u–ÖШy^*6#`ñ&fRT`MA³Áûr߇UdQUaiõ!<…;Õ›.Yõ–Ö:“î zÆ×‡ F¥^.\Oe{Cþ0†ïã¯çýy÷µþ¾È’˜Ÿ~hM%7Šàáõ¾ q‘“ú/|ï¥I Ÿ¥ÈÅö÷©P&íý-±#(ÜyZ3?µUŒb/eªV+`fÓ—¢êL^è …Ñ~Ñ@¤jÝfB&FZ AÔIœ_ &¯ƒŒié jÂ&¯Ëï>eO©,Ü>Š»¾ ³&·cŠJâ6ÿʽμ‚ã3iš:#j÷Ý×HõÏ£&9Ö;4fª™­Ö:¿k}ü2Œ ã’–3„áÜÛê¸Uj~Åâß@ýàæ´„óUhdÜ ¸a–;¢òW^9Y»q.5{U{„Iô¨Q7^ 9pk)ŸøùÛŽ­[k‚ßv³ šG%DÎrMµdB‡„z}öÝtU)¹ÒÜL`ÛœE&›µÓ0Ã`0ŠKL]³RÒ—]:¥äfšd .X÷½£n&ì¾!d Ú‡£1ZÊ ¶µ&â©“ãr{¥¹#ÿ,rOqÝ,½ôBeÝžav¿yŽ&ï¹Â<:GA…èÈœ†îýp95}n×Ïôû¬Ï37S²<‡¸xѼ~œÂ—ÑËBþíM|Zê¼ÍEOqxDWLqè]Â7ÓŒËOÕ\-ýÀñ&ƒq-h[«YéÓ,ß².Cª&Í£… ®#‚-+‡\¦ø=q_®Ÿ¹•¦îä/œÀ‹}b°H†íñ [)>»`¸×=ž¨Ñ‘[h1™æUçc=“\JÚ¿ HXpZäãÍçÏ7Ô¹¼SQD ¼C•Hdpñ‡_Ü—\å…YòR[e-d¢^a&÷ ŒDƒGhˆÝ¶JÒἊ|­û³ï‚fºsh~lËL…P¡´\”iÆ)‘õýݱéþ CôÞ••nù¬ƒk Övé æw(^IŸùa´ü4†]Ïr#ÍîB¸|ÿ<M`¼NƒËKŽZ{?u–{øÆúOÒÎÕÒü]Jð†bó{Ü{AD%ÔëOaÝ‘þälõŸ…8 ´,T‘ÍnýCŸ¸~WŒŽÁ.<6ìÐ+À_¼Pi¤-d(†Bê JƳ>N} W=û±Ð å¸çµ}~Øšâÿ™*Ði­‹·Ö;zöü—íP›ùþU%îñIþ´¤p+ô­‚s­eènÃ4Ðw¥.(À¾XÖ©«´—* ¶òr6C»…mHC0׌cF5÷]&…Ý:Ëq5…ïd4j;àƒü{Y•>9󀈌råÝ*M€/¾déíŽÕׂÞ€Êì^‹ÉdÞ+£ —•ûšsõ" }Ü+ ƒË\´ßž›uTBáˆ&²ö>ýFbfgpxu^9…>+)Šª.¼]8ŽøqjiHHYúv\s¶ŽúmB”:¼ÒÙÜë蕟s”À^qö¥Pöâ¬;GÅŒ¨ò»sÆœ¯eÁ‘5vúCÎgíM½õdA}«âl%Pj!Ubû“ò°|sñéoø`\q ÁŽd޹II€m:mz±Xù@žîì¯ ®‚ʯij0zñŠço&Sd|ß-ÄVa§sKšñ@¢\g‹AœƒÛ'¤Ý.OÔ•0ßÕ—A°Å5!5ÆÅØ/,þÖ‚Cœ­8‘X2æì©3ÃÒ–x¹FWŠŽîg%€zË%rf,ÝÍhÃk,m™\ö‡nFÞ™ýÕ|D©aØ*ˆäGÀ’~Ì)j”sº+%®Nëw+” Ù:\¾pñëkN¹”$u²ŽD#/½®'DðäôŽë™-jV'‡§#BݶÉf?•DÁÖÃË—¤šzf¼Ä)|À¤B H­¤û&Ò^r¢=Ýž ´}3d-ÖÐÚÕÎiÑ`œ†çD/l=̦áB-[ÍE«–IFC¹¹aÐf1çX~CŸ BŒÊΘyvÜÇÓ¸Tùo:F‡ñ5½ç•ŘK%ºßi[vÓ~±Ê†ð8†§Y\aSݨSÓóÅýi'f¶!Þv5:RŽ uÎõ)Kà ɿé•§šÌþiäµ<‰Üy”Ñä.§ŽÏJ §ü;Ù"¡¶ì€R¥£Ê—Ž™\·ÏJªÁFB‚ Eò] ŽzSÍJk¢ðÁ¹£ò®…ÆÅq;Ô´ìóбX¥Nð/ü'¡ÍJû »œì ©ôêmzM» GOwªšeÒ íMæô­Õ±ÐùIâœi‡•¨($2º_˸ùPàeXp¬Ÿ˜~~äm/™%Ó BK;“É+¬¬‘qWW/„”Õ•4ÍÁY{å‹p‹pžc•#ÊÕ(ß2ješMô£|!ó³2<­/Ó–˜ºôœûþ8Ý2Fà%ì«DJö+{ðwŒí]+Ë`>Ò|8ŸÙ©ârõw±ÂýÛˆC¡sKEµ~‘ZÄ6ŠŽƒ|ôéÁQTi†)µL“yŸ!‹Ui¬`VNU§ ¶Ò!ý?Ëkûwf$D*JlÇl±ǶÈIó‰]ð›ãÜÔßÜž“2î޾cã&|ˆ ÜOÒ§÷rõ–À*Ñ1±¢¶ýãkŠÀa…¤4fa~”Ý¥¸Ø“a_xû9E{ˆ®Ÿ%JÔ±¿5Q”‘3*\gr­± ‡¤C<íÄ÷ØãÊ|Ô 0§¯òó°—hÎ,ƒ è9  ]GE(–™^ÃØ_Ó³ûÌVïoæ"ªuVSPÓÁÖ­2ž‚?r©.’\YjØ~8о°žšäX9"Ô°wŽÑîÏ:OÆ´Ó™Ùûä/ú&#öº^p–p'Þkd欋h¿^aBd>üäß”ÌyQ@\(”ÇVâAE¥#èRàb0{fÙRK!ð:ÅÉã±=Væ²÷! sÎi¹§WW¹ÙžÚ_»‹œH¾®Q8$¨µA!²ïB±™¤øHú¹¶‚uZ—˜éþïrqŠ)Ø£Þ‰[<çgiެñÏ©^9¬²¬ëEoÓ1»Ýi¹¤<Ì”’+¬ž‡„;ËÁß%Nmgë4†ñg¿Nþ)¹3¾%žÒ hɼöì'ÕUgª\ü䆗æ|`;£FˆÆFN&5y ³ #@rŸ‰± ܼ_­½‚¿ñP櫜¤ñ¿y ×b]š²Õ`ßžEv—U…­bñ%ˆÌ$åŽÒ팒œÅ”¹Ú'sÉV*”x–‚è)×ßlR·߉3<½£û —…ó  k'ku’vÿóR <\´…]1Ö×K—­óçoÄÛšÍÄ='svÕDÍ(¶¹-fïAnª®SÑ–3»Qy“¤-zûÑ)$Ñ´üC üuýtØÝ¼HÍ䡵óf;UkV@X‡Û$²L n¶%}ùWçþ¹ñ@.×plDØ,Í›RÔ`A¾ñ·?D[½ˆ ™`ƒ=G;™‘ž›h}Ct7»Î¨U1uzªæ©å+:9¥Z±ð¿%9Îv‘Gp³9OàÄi‡›p_ÍŒ0´4Ùfž†î²÷Xõ¸ùÄ<ÉHøRƒ@)ÖbÆÔâ†lóGri`F ½û<áó’Ѫ* RÍåIHbÎu¶â™\’jþcV˼±Z9“”ÂóVá’1t^úl¤’d‚a–O´ž, #~¸’aCd˜4où(¼eÈ(ü%ªáÚBè‘i;Ð 5Îr?¾h4ðà¡`JkxFrhh¨’ÔúH/æ@Â$öNœ@¿G EÊzB9\`£Á¿DÔ+Ém niŽ÷<žŠÏ˜÷á’Ý7z£—+ÅHB7%Ÿ\™Ùophê?Î>älFIgÉ—5i«ìu›]6jQ.L:/Oi,H±§W¦®—„b$`ևߋ¸£~÷ ä[ûçï€d®Š d‹±JTŠ™g”®¥_Ö„h{:ãó%™<£WÈÄ5¯ÍŽªÝ“}€òicJ,ðtF1^ßéE•3_ÂH]'•¥ "Æ„ 8f…w{ô)s&Þãpãé¾¾…M #]Á¯¿ŠXçKFKüE`¸0×á'`Ux/WVZ^ÏZíÇòÌ‘ž"#ÀM²µ=µcÕa„¬Y÷w„Ë«g„¦„$éž~¾0)ص N.¿˜ë‹‹ÔfvõÂnìv¢9 S5)n&H€Vú=:âaÍïœtÄÅͯP-×AQÐ_ㆠ9?ý'§Úôõ/u©&?R~z\‰î¯–+›øî[Â:5ý½¡vïAr©–ÉÄ6zôÔËÉë8gU3NûS"錌·­sYîs¬M»=Åç»M&ðæö˜¶eùÔÙ©õë—ö¨7½?G$üõÞªÊÑõsØÙœÅK«‘4Z—ˆ×fx‚6þ. Â]ƒv¯¦·z‘¹¢¹Nò©²Ød"FFžðfö@~\糿½2Rø 㹡¥ø•¶•è,¨·<)ß°ç—_ÜžKþɉ†í«øS+C*ƒ‘N°AäÑï)ÇFòq:wý¬*)ò×XS”¨ƒî{w)Ø£vAy "sÇ\ÌÝ[“)‰Xx9,6¯éšDSÎïRr¼{z¦`P0›Gd”Š®–)2•,³›º¥0ÊJèß¹¦’ÈZÅG—2zY±9y7rCøè\9ý rŠ[ÈRÎ}…-bæÇaƒ3wÅdÚø$úº­f–.ÌVÖ'½Ú YâÞ`þï¤Í!œ?f{¼ÂÂþÊéÊ‹CZMäÊv{Ec’' üaq)óÞ¼f×YÑŒÂØ§ áJr6ÕñÕ³zW!Ì! +iVï]ŸëÊ ãK‹PófýÉ‹9n+õäÞñð³¨ð¤=«ÉކêPëi¨ç8c~©‹ 'a²&tK|iãZf$æ@aìèü­Ìg ­å½y'¬8þÍ=*GSní[ìv-zèËåd€Ëßíí6–Ö¸I÷F†‚þb“UЦbálk‹èˆŽ/_ ŸÌ^ó¥ò QL¸ažîƒ×Ú¨ÃÕU×òc¼®ûha0óõX „ ­¡³/¥On§}²V×ÿM-Ì’ ÌTöÖz\†OËÈá°ìwO) [Q‚=IƒÿÉ—f{l¡ ÕJˆiD©·ã/U!ð.f=Öùƒ$¹ABciBf¥M³²å=cµM@Ùø·˜"lUóåÈM•/(Û¬dd4“ñŽϳ 8‹È=¹úá*:†eøA뛩;>¦8>å —?êÐKȰ÷u›11v7hÁÑ+?žšBÊb|8£¯Q ÿî£Ï—èCg]匒¸õý]^ÅОœB´íd»ÿÎ;bŸbs­¸ý­œ×`!£/!¡j¬¤z_nN۱ѡ¶=t®ôÒÙ<Ò³ÿu¡\a8FÌÞI1KoD ƒ%g¤¤•Ö¿ÏPFÂ)Ógùé7bGAg§sBe¬—A¢b§ElÂRÛ&øü¸0Ã8룫8'[N¸ 1\õešÒ-·SWýÍ+޳:ß‚µØ“T*ZÜ›È<Ѝò¢l .k¥ã+ÓqƒMÒIk:…LË5¥»s.%ÁÉq>Þ=¹ïIú" h“BÎHòÁ|˜úö£VÅù÷C¸ u„†gÛ§´ž%Ø—¡nïÏq;Žvå˜J¶ì^ ÷Ô1½o-';TæOõ«Ý Š5û9½±M*5Ó{ѹ»§ýõÙ[jë%kë™ °Ä¬|ᇞ7g,޾‚SV::ìaGï‰y9D^V1YGÙ¶¼\äчIá¿k¾õCä>&Ñ:3µrȪÂÒ§à7ÓØT1á…1jÊÇÃ=†¤xVz'Kçê7Ø-ª3¼xœEblä´…ÖéøŒå³0—ÙØ$Y®`|IörÜOžý5»d\Àž4ù­,§í5(U>ï½#Èxk븞_•!DzÅ1Ü/~9@Eò¸dÉò yUý„góïtHÑ2éI.wáÑâj™8ÅHÑ›8”0õüÖÿƒ_è5 ê’Iù¬ó“ÏÈne7¹ü§Æ[ó#²aJ[Pl*¾@™½nµ#ÄL©Ê“h'¸#‘î9ʼn9RÏeµõoiÇÎd™epÇEWy~¼ jeª73úÿ>ô#<óP»ªè}ßü‹=ì‰öñ>!•‚9ûÝ ëˆ-PàªÐÍFc}Q‘°xG÷Á4@8zxú" ÝIoô÷U€Ý¥FJñqc¡~£UõÞ½»<Ê…] G=á˜I­¢s¡öó¦©ó§ºä‹Ã„u¿èƒÞ4 )ÉܼnRœÐ:ºÓEiIÁB9µ ž+ΛŸî#l³¡¯ËS¦È'#Ë++ŽtÃ3•¦ ºÑ.åÔTñ]‹âHs¿¥Ú }‚þ­¡ƒËõÑéBì Æž-ml¶E—ï¦Ñêðu¥ùÓÏiDæD4£? 7°IoÌvÝpµD7‚­Xq¼\fnM?…fgãŸÄàÇTŸWü·dÒH[f'ÊèÕQ…ÚGî-)ì3—áNëŸïƒ±by*_[õŒoDZ+Þ!6UøZ*( 2ભ…i0ú8I¢Z4>(»)e½x®M’h×¾Â)U½ì9úåeÛpÕAÛE÷[)3MG™æ(PWwÅ…˜H›&Q(F+16f „ÝøVEòTKÆ`¸4«zoô•T7§Þ2ÏÍ!ò@º´l]1-×¶(»ð…©wlÜ\Ö^kû×òÞ+nÁ¬‘}KŽxVu¸É•¢6tÝ™RE c~}F\2 5…¯|c¨x›WtìÍ3²™s ¹öä#k,z…ù9C„± Ô–_°‡¥Òn>bT¤Dæó·š;è¶ËÏqedÚåK§1~ð‰_uÛv*¬îŒŒ…¬Ñu½Í94aš óE¡£­JØ«ª÷_æI~|þL/}iÜñ¸÷›7¢}Üú·Ø³Xò½.9NÉ^p¹"âýNI¬ùÑD'VŽðKàHífYA»CÍN1cÁàI¨¬ú@ÿÍÇ5 fõm+À¹ªú[züž®á-b>ì¯*„½xC~êAB„¦í™òîJ“E"/åü’\ºoË{{û¯&"OÝù9ß0G#TNnp!hŒÍY}{@ÁîV²TÏ!¶)DT˜}RhO¬¸òÉÁ©ãçy®,LP~hµâº¨zölA¯xÞÑô§HSXAÇé<¯0ª[|x¹¡o¶áϬô±UÐé“U.Ö—?³8ó˜àKÚRwæ6X ¾ÜõÙíä€;¾ãîÏz[ÜøŒÍ͆ÊÍ_V7D„©ìµ´œ¼%Ë>ŒÎc3Ø•úÖ‹JâËbƒ*kü¸üMˆé¨$Y¶ø˜"Ó†± ÝÝäÍ:Î|Ç`yôqë9ÅGÜ lеBqeœ"ðj`YAš"Ò:Ù0‘†gBèº&Û^ü_ì®Ò1úªEç£ôRÔÒqî¹æÃ©í|‘~5a/@!–¬I aÈ-¤ª$ÀsÀJ½ŠU…íhUµ÷&OŽ0“–wÆ"Ê\žr…S§2˜»Kî¢p½çc¡ÕK'>CÎ'.o~6q™ò–ȶFÄ5:X?̹¸¬ýYPåöOEÁœØ&6ŸV¥ò%`lä¿õK×§–Ÿ[ÃÙy ɱ¿ cioœu-0y…·x`¬þÙbejò§¤ýï{Ü=Ñ¡lLƒ…ä0l¶àHº6·qdñ`í}’RÿÔ~àJ ÿí‚\&Ÿ=€ßùe—Œÿ£¤ç@BvÔˆÇßì»[‚®«ÎŠ‹¬JPYå PmÚTM›Í\öD¡æþ÷¡Ó8,Mz+ÃÇp¦êïGf!­ùwtwqÏ娺V¹/¬.¯ŽmVþñI†q”ƒpZx¸ ÂÎzõâ}ÞPÿg­æâµtIÓ'ãï,{ÔjCý R ¸…$ƒê5c=~d½@ZËõ†ÒßÞu[»áÓõYÚUݬ †¨ÐÑâÕ•,ò u. •Û§{«ã§;‰æþo[¿±Võ»B{²-¨î»È=íÝèÆL¤ÇH“gŒÕfà¦Þ•RɬÉÿTBnMIm³]FãA8ÿqÿÙŽ†Û#ö¹4ÉGu~X5¶Â-m`n‡¼î³øL•›#‰û”8 éŸÓH$§ƒ.^šWjl:ûï+íb¬ÂU¯1ÿ…Mr"PCãsK|–›0ogbëgŸZŽW¶}ßµeBLê-ó ‚ ‹¡5tÕž£#Ç;}ðp îý¯4¨J²”Zý¹«Š”¹$†ƒïghóµWˆ?sšDu¨Ÿ÷ ¾ui.û¬éMù•¦½6Vµ»k ¿°V¥#\ÝPJ¼›oŒIÃ9¯]ìS0’§‘„еö`™@^ œbI‹ƒ„^ô²ßûÃ$^ަÉ`KF5‚û&0ó·U¹Çê2R'l-VÇH”ÿÆŒ¥;uhÁì²9ŒÇy6÷4ÿMEUIùùCE Až´ÿdDÚBw˜&ÅN›‚{«RóI‹Zœê}-­ }TÚÁêF±Æ7Ut€ƒ»ì­Ø?ãÆ ä¾›2°›„¸þZ»sä­ Yá4XLú¼ÎáûJ„éõyæðp7«М.&ÃÊ_^b¬{E°-R éL£r“Æ ÛŠ’Ÿª¨Ç:ÐÿòT»|ȹ3k"kÂ;±£x¡?›·hDؘ¸÷·ò€Ö1¦xz¶cAûÔÀI9[âªëPd×lq97l ºQ–µÛàÿünô{˜så?¦l¦KHäüA.Ë0¸„)R¤ç[#¦Nñc`Ö}gÞò¤:&ŸúGTÚé·oÐN5j& ¿1p=b©’DåŠÁš×ÿ¬½ÀÜ¥"¯T'¹Gjþp‡‡Š:¢3óÙ‚‹踶²/ü½ÞX<þAm&ßù¼¸áŠJïílÀˆ³PîˆÂƒª5 tÑÕ&:|õEpm99p%`ðT»›4x°Twáþœ4uK¹kÙ‹YKš]¿T8¥±®õÁæh¿GÜÞ,ofÒŸ‚ÛÒ»qìk¡£Íl1êøynwvW{0qJl–™ùPük@p™i ._ o®øêN˜Iâ1'ý ¿koŽ óƒµG×´Cǰ ¡}–ᆮ2xçH–}çì&6ÁëÊÊÄ„±sCÆ ?¶QnO¨Å0ŽÊjºl{T D±ì£wI%í°Í$DEaÍ…&žÓXN†$M0 Ëk¬HJRLî°u\¹zjc¨b;îW?9ã«Ù~· —¡†Ö,Š ’<ýÜ /îГ̸¶Ã„¬ŽÈbÑ.[ã&E¢íØHË6Ðì-ù³êx¶$—ÜÉñ1¶‚¿½PêiYKze+Ngáåì„Æ*À”’Á¼ÿ’óCÀúÓ¼.ÛÝ~àv&‰úE¬üY j[¢èÕv{ˆFYnŽ¿-ÖyI1 ÿ­Wú-Å!4ŽÖúùí<Å&âÙû†­y<æ±oÈ&:–œV-Þ“Çüò°Î¹RÊã©,cIQwòŒ>5—?¬sÈRfG¹×Ðiºùa1¿þWP J–`ß‘†çFŽ&m±á;.² ®U„£az¨©e*€DJáò®´A¶Ö S•x DpN? »Æc”ºéú1pìSyUU²–åÎ$}À\ ­Z%Ml-âä!ÈÙÛ™–ïà~b}npróÔy ë´'ë{o×µøö¼Ý}ZpîæXÚcðzÊhÈ¥ô.žZ8bß|œ&wƒ{g4Cf§Ý|¤—Žf;ï 'ˆ`ÃpÅ÷³ÛNA—…S¡ OûÞQ™: ÕjPâ(×€íÞfÌN¾Â3?¸c8å¦Y!Ðö¯š¨™]—ñ_ï Œ½Î6Œ ³x‚ÀN_a1ËÑ—ˆ:Obûš2S¨·t ~Ñßù¨( YoÜ+EHyOØEìÞCX±˜— .ÜIn,ÓÓáV[GB“mÔ¹k[~nE0=¤ûpD4=ƒ¾ ®©|ȵ£Z´lè*EMò°þ¡yP ù?ƒ,Ì;‘^îV÷Müß²“ñàå;KÂt66}elÏ`à8) OcoFoîv¼k‡t¸‹B32÷'29,Ó?•[˶§Y;˜!’¦}¹~ŽËDº»¯Æ—Ç ¶[ÃÍ×Áu³¾®x%¬CšêÒ/â3ðê§þo.—Œ&´{¶MŒ‡¦q‡[:r8Gøít9,à-ƒQ¸,/ X/U´?F©"ˆÜyæN2ÏšH_c@B*¶¯Ÿ7ØçD#¨RG©gÐŽü5ªí Ï­ó!PÙON®8|§xb¿Ç£·òœLòî’¬”éiÓFÝ™¦ÅJ²]Û˜ÅsÇv'ŽØ×ða®Î+EK¶«I¾oÙO¨Ë>¸ZÖú¥‹FO”Š9š³w\(é ½4€F¦³á%šX¤ûÓ¥Nãú«÷˳é¢"Ò>{¡iëg»kWxy¬îrǯœHä¬Ó¥ÁÃy..”ýÃö`RÅzuôÜ” nÝÄÑH3 TI{G·œCƒÂ‡ƒ £™ýù”Qܳd<Öæ½\ÌDæ1Ù6áÛ1rˆnǹ Ý-$%¶Ru”§#ö =_tC*¬}£g)L,çQ|i fˆ ºGÕzDì¥Fš…^Ðîù`’E]í¨·c)æÀ2ž…éõ õ­Á?ŒõÙf~_#ùÇ´hÌLºB}êJÔÇU+BEXI<í«Djµ\¸¥2IA#Ž9¶÷”Ca«:ãÇŽéËÛsð/¬äWçy‡ªþ˸jñ¢E¦ÅÀ2¼#:®2Ø|,o”“?Ûrà üﵬ¼a}æ[ǹ›³t5­ e»¢ ^êÞGWÔ9_¾úñ=\qA"žlNDçû÷u£Ó¤)€@dx¡ÑZã<Œ»Ž¾¦óŠa(ÌeÿSvŠ"ïÆçÚ†t:«&l5a¦<€­´b½ž^éù\ºl=B Ãò-ÑÐÔ•ÝÅg÷[5_o'¹DnœÉ§æNt;¾©[] ôh#ü±‹ ‰ð´(‡¤b ¯T—ß•_£õcAN >Û¶…Ž!- äi³Wl=ïÌÁéc] œ"†w:‰Y´‡vø0ÂÐû1÷õWŸãßíÑZ5v.~Ñ.Òâ9"©+ÊB‹¤×y=b²Mn<~ë6ÜÖ…¹4z_Æ_ ]=,½ˆVtmñC#â-YY0qy*qÆp^ÐQŽÛã :ríT>Š"4ÌžöúŸV$´òØÅ™Ôa›~U;%v§ŒQ4Ëþ"»é…&vDºêwµ–Ù4Ï÷QRÏà€8k —ƒ|Í'eàS”<4¹Œó¬öƒUsIã—X|,•Šéìƒê9ˆÔ‚zMóë®ÃÂçíŽúk²1s _ÿûK§â%ôœ8¯IÔÞ ßµ?“ŠŒ% Ö&£}ẽ“Pðû‡ ·Êuò®ÏaäiÃ3# UÅÉ%gÏAv{ ¶Ø65Žæ˜…˽Ì%ÞÙÄ ÊÂ#ÉAn¾³^oÕÙ[hsºSHãÄJ­¶%§vx¿Aÿy­Suï ÎG˜ÅœŒˆÚÙ@G…À Ù"^ U®Uœ •– %s¹®9(2¨c©Ðž<™V5Û‚Pí¬A}:C Æ{«¥ývµP1íù1Ÿ²2‰oŽÀLio`’žÔ*Í?¸˜óýçû~ØÊuƒúïR,8užÃ›€6A÷"‡íDgG‚.w©,oðŠŽÓK(~Ù2/GøjÁ*iP ü%î©=d‰ºŽÝ‰Ds7g`ýÌãj’ô`ÚÚnúM­ˆâU×Ô‚à¿Óíî´óÆ”cÃ&^àb%šZÉôijü2Už`ß3 àI™ão¬æŒÉï\:©û¥'œÞe*n=ÝñUâǯ…÷ìgûÒ?0-Pt«”¬5úÔ ›¡®¾l)Ââ L¥«.”n³f4Šý¶°ÁŒçv‡eøúISÚÈÎ váÛ U¶$—33:‘G‡ªBwSHhó…¼iúµÝÝ,äŽñb‘jÒÞrpì®vØ.ä–—p~3Åßaÿ$8rïózvÞSˆiñ"ÿ–ÀÔB”û-6Í`Á«¦ˆÍîÒ'JØG•SZÐì,ðÐiç}7 ûy+¬è6©Dè_•œCæ.^±GúëB)üÎzræq)Ð:T9,å8‹i²—2mºh;~u4BùŸýC¤ÞïÀ£Wp-l$®Ad44½È¬¡>æÊårT.I†ÿŨ6ÁC1+äj>e\Д+´ÉÕ’Þ=‚æ[¸ ‚gšéÃÅ|¢.Os4¤ô>ýÁÅwîs¯î|xaÄiËÏ)R•'\Ò„EvKå¿/\ë'øQZž´B!••}RÌ´¸?rA0… ©Ý®áÛ£q×Ë5u¡EÏÀøÅ8N<Ôlû ñ Á z1ú½NÃ/\œñ¦äcPW…០+ÎæÕ ÊÓkþìŸñG:Îî`äùØ#²«mår0_¹ZǼ©_ôTDæ÷n3kü ‡ßy“¹Wªû#›¢ ;œÛ0µì4õ…t:–S´¦ÃQXƒ‰”Üd}kWyFΘ󚢒r¢õÉô†¢V!Aµg¤ žòx¼#­è÷Àžº9ÇNKØ),üϱ^….Û3º×þªÉ’ÐC«3kÖáüOëA¹vú¼CV´öø†È~'}(I·¯L5ú×K8l@Zå"4ŒhÐêKÙ¨À½8q'gÙE¦F‚й7¢í¦ú_Þ) ݺp-|Ñë?;W•4޹‚ŠùÓ&Êø+u#+2.ôœ•¬½` íîøEÀ‰¦•ùL>¯ó=Š&u®Èö<½e?òYT€‚ù¯ AÚ¸&x©lñ¨íÚ?R»è Ìå%V=¬‚&føÕÕ€®‚D1Žqyˆ*¤4M[ €‹Å Œ“hTfû<¸ô"%bEÒ\Vl%^Ö `f刉ë¤.07hI¡ð!NDµÖMp´zö„öè­òÓ}¾efv‰‰€‰{©?"¯E]‘¦´˜èÜCÖGz cÌðÝ7]²þ‚Ðü…-ùÂ.e¤Àé_•|öOíÄvÎrÚö`YÈFàp ±> áXE7üFp>'›üR XÛÑ3>CÁkð+ÝðRh× ËŽÒ8ŽðÔDëº$(:”X°ý¡¹u–¤¬9§‚ÏÞ^´øÜ¸ ‹PÙHºâ;Àïͱ=\‡&#(XÐc­—~åL:ËÂÞQ¥FŸÇ‘ÝÉ£5„wÞѰev¼a³–‚ådgÿ¹y÷pˆ^Jÿ­MÚ‹$†ßÍEªç¯ž¡õ›bfhtw‚Å)‰‚–¦êÕ”KègTüžÙa7ËÉrjG”¨Ñ®LÞap©+/Fû-YGf:h<Æ]¸Ø{Zs•HñÞûIu;W› 7I¬°ú½ÙL‰×Í&ûÅ.0®à•Eè{Ò‚Åaíäe³ËÃØ2-ú)ËÛ0p øøóO+qîy˜dä`êÏ 6豫$IGëèHÑá«•Ó™Qo‰B™ƒ³…=(”ëSGQì‰~sWÌå®¶‡PÅ t“ööQ M`“x»ì[®-~ð‹[UxÎD®­Ô÷‘Ñ×dMê;&ƒuM !ð›²lJä‹8’í¶^óx¦ü«Œåt?sk°È¦Q ·P;qßÇ{­ëc¥Ó‹õñE+pV¢Ú‘ ƒ>4µÌú9žìAÃÎD?(ˆ:ñá¥, ò#ý§0÷êC…EãékQþ?®ÎiYgÖ˶mÛ¶mÛ¶mÛ¶ö²mÛ¶mg¦æê?O›TW§:ùBu 7UOÑ7vjëHãŽâª#7Yž¬oÝfêóXqÔ"0ÿ|2aC1w7¼ peW6ô (‘=ó]:Ì«›a³g@øcïí"-‹÷¬3Ùö]¶gJ%+B”»`È£8FàBåA±ÔÔÎÌÄš¿†€3hWb¹é?Þ{‹ªë›(ö¶:ÖÛÅ’Ë_?"#Xêðͨ¹±+ý¹Ëõ:¬2kLåÉeç$™"xtwžØÁ6ì£2«Íèÿ³o˜Šƾ6=ƒÌG\ÿÑy\5KÙsäh🂶¤õõA¶Xsøo¸3)ý mÜ­Ý:¼xOý¼m¥ðоpŽÖ"ª$šÆTœ »¼±ìñMh¸>’ð)fÏäéþÏhUb?¥™K²ƒzjµ¨Þ)Ò”+Dfï½Ó¤TlsÙ‰…y©‰áˆùÀdnïvþçxˆq%“ÒŽEÿ# 4žá;cÏÂ,ÿ’ÉgNì0po34£?BãG¡CúqQðêE|=Ÿ,ªÛgñIàùzÒƒÿ †¾ý¸Ÿà+±Œò÷U)ŽTÚ±˜c7fCÕòÏ?Èç§Ý¦6Mû¡Á“Þìtû!ä ±È”O¢UY×Q¯ÆÃø × Ý…bíGØ™=2Ž¥ºúž 3êOãñXMéŒXÀ;’Ëww 3]ƒ{x¨L5~h©ª¿¼û_®S4ß–î¦è¬ÁØŸN¼ ÀS…Œˆi±¥'{S€¨S‰ìü÷ñáœ,×MMUX°Îƒr3Ä'ç^G>À¯ËèÈåµðdлÈJ^x -†Û²lÝOZy5 F׉ 6&|sÍö -itÎÝ$Mt«S¢@]§Bô}—‰\¢Ôo¢á‘­µM[Þÿ-äTHã§Æú£ê›Ô¯>0Î} ó}>úp95?űjå£f¹“{¨!Uþ(UÆÇìjD²éx}$R«KëÓó¯ÎnᱦCž$ÿkè?°ç)‹âºjìB žÂüˆVû‡²­ÓËK©Ô˯“.úÕbƒ1ØÁ?`$†-ŒÂÂd/ ¥¶d“Ûòqu£O¯Šßü!°?†ë2·S.–’+Gù=V¼…{ä\⼬P¾,ÉœÉIJR d ‡së…ëIA,ŽýºDtžÏ¢WÞÉÊSÈEãœÓ\CÛæ¹~ï¡1Yîù}~kËãü‹uÛRˆè êJ*³Ú›‚¦l™ë æÉ޲]¤š¯?ˆˆ5‚NR„W;¤„ ðF„¼Ì¬H%u䟭ž˜ðà^‰«à˜¹o<~ÉVá¢Ýmïüòèú D÷"MmcQï%’[«( ~ÜPa,¯{=Zn ã÷ØÞJŠãçû½~RUíF Ø®°0¢ˆŽ6X®º–R5·Í{6¤iˆ¦ÞT¡¦À©U'‘Ã)S¦¼,÷Ù õf ;ËÍÖ_iºÚô’X%ÎU‹„Z§fƒë¢ùçwª«ÁÕÒDÉb¥¿jÎÞ‰˜c¨Da5°¤F²ÀpØRh‰ÇZ/ÆÝ6÷‰‰0jõÝSVšö¹û¬g›¢¯"%¬µÛ5ñ†»£åÑ%ñÊàDyòhûa³Î‹„ XP• Åjò6§ÀCµ¬ #y¹nƒ¹7f;<„øþ;€qÿœÊæÙ(Þð¼I²DÆè{ä°€g²Ýz´i¶¶ÏJ•¡äã2Ê@wöÐ 3¦$4EÇVJ;ˆù X°-쵬¼ŽY¨HM4{R^FmHXx¹¤ÀTÂÝÌaŽjÖÑÏZ nœüZ•K( wOÅ…g»/ƒ¬ÓmãêVê¶ óx¼­ûÏÉwW¤ä½yLO㈤Á¬K;ܟ䇫ÄIÂÑ5Â$FJ`‚…w—(é /éš¿UtFØQÚ7¡®š«™{·=2‡ÎFQVÎäØ5Ò+’+UT%øšM¢I˜Rï5'Ö«Êwé /ÁÕ9Q¿Aƒ>Êñ4ôÁÄñÒAåBèj\ÓïK؇ÆÁC²¡c ²&tå ÇObQŽn[÷bÇZÊÌ¢¥Š¡¼š\üGºŽGö(ܵ™Œw™ß[¬py’½Ý×ï:ùzºÃº´ôß͂ǘ^¡ƒf Pxßõ?n—–ðÚÝéuU€L7Ih±ÖÝ€aó%R˜™)ýÊ(¬RÚjߺù+H,"ÿE9`coÑD-ið×/®F¶èŸphGRçwD³¥GÆÖ‚o$mwƬ÷ÀXýR‡ûY{•¬\t©N—€)VêVq/Pfqït™5ÍXñóÛ%6¡¹K·šn‘P3W.iáÈ}ø]G-¤dNƒ!ñ馺çÌ ¥Ÿè¬â›îÃ’"+]E-ĪÕf.vÑtŸîLË!ãxèø¼ùAUìN¼9˜ÆøëÓ¾!UL\>[‡“¾üõGÚ@ÎÅàÆEhü]‰¨þ. ò ¨.¼°¯52¨Îj2Ù¤£aSÐ82¾ÈzˆJþ×$¯FDÈB&£0ç‹dŒåÜÀ‡î–7t-–VœNùêÀω3 ÑSL$‰NÙ,´W tHœ+ÃgXš[;¬` ®Jûð¾̲%LËFKù›Ÿsa·¹l+6D Î2ê»’Ø¡Dm¨È»º®ˆÖ=Õkkn’ ïÞ.Û¹-¨_{q%çáÈæ\+Ѻ‚˜Ì˜}B}·> ÞM=¦éém¹ðšyÙ­‘«‚6³d=É&r2T'ÙöÍÐ+·¦Ëm†åJn+1†€fÕ¾ˆ¨,-m¶SÉE$é2÷ôÏùÑ‚}Ž’Uß½BëÇúmr’U6Ãi×ünÝj¢õ¢û¨bQÒÑeö ð×þk ä°sšߢ¼4P¸º¦L!þPj_A›? Ê*= ÈT8 °Ê:¯×þÑD…` —,ýQ;éà)‹&¿X§þ³§2û²&ÐâŽ$ÃoáöÀ¦Ï)dï[L'•ªïÈå1‹«`ÙÂN˜L·‹¶ d±°›‘KÁ½eQRÁä»t€ò›‰½Q·ó„æHyqE§¸§46Ú¹ÿVàÒ®"(}&¯|jAãËÃ×à!ÑÉZ?¿dÇ `øD'€CêHÀßl‡˜ íÖ¹Å+ï{¡}rç h‡Ž‰®Tû5ð¸ßBÙn·¥M¸ØJÄ_Ü)L7Þ8ò„/€Cñuñ}lêÿ,ÌÆqD¤ÆyƒcPÇXDr$)÷’Èdeöz“ò¯+nÜјjRQ0kÐÈ›‰2CÜU}á@ä:V/Ü4$\4,eŸ»ð™3#˳¯d‹Õ¤ŒÀ܈á˜xÎá!;]¡{¨Û[‘])ÛªÓz;Øõ”°‹…Ø´´¾€nP3Ü#=€Þ!$£¨4ÄÑS+TŒZ»N;ÁÊ®T“^`zÈhu©åi]{È[É>ȧΩØˆêäÄCõY)N¦ÓNuÄ–žÒÂŽ¬û?¦7tâØ“¬Á)hLÔh×á]0,{K,§Êz‘¢IñŸ‚^oOAzöø:¥ãýd~D 1œè/µp=œ ð ¢]ßNf]«»½Dü»ðnr„uòMÅ&Ž5g¨Èš½5]uFEà/8DjØ¢‚s"Ã;"E ?ˆœ¬ؘfß‘ãüÁ–íÐ×äÖ0ˆB ëõ†ËŽzÃ9“÷ÃÕ¹7Њ¦ˆ†ÃÛ_ü”™¦;\¼ _?’@(ŸN=°¡ˆ“öÂ×âÎ4/¢lÁïSsŸ? .Ò¿õê~°רV’g%rC?è€ÆØé»_’Oéf+²êU[‰Qü(¸¾@sœ†AÚOÉv”:!$“ÑiŸ!¼Øk×®pNˆìïŸ6¹™Ãï¾(I:®Î©Æi‘t5ÀòÊ^¬¼R«BåX^gºv¾[ÙŸ‰+Øàï…¼ZúŠèvr=XÐW®›ãM‚¡ ñzE]ª0@XÂÀ1ºSñ@YÇЛÁ[’;y0³{¼ ÀNÊ0èékOÃÔ/«éoÉ“ª®áµ9—¿4)ú®ŸËâÔ‚EP(Ú«`MöðdšDoiZì¸}j1VrÆsæú«1½¸?ä»Ît½]àV¿öÜe®2ëqÍÍœŸLV´YnWý‰B„Ÿ5wù »aæT‘*–RèÆ°Œím¨šG0UÎâ¬8(6þâ‰;€Š|»ÅV†T7vª5ƒƒ‡[{f©h€wfÙ½À{Øa-PóU’¸Öó9}õDõêN› ¦lNe‘}GåÝ*ú~H¼ÞlwmÏ ã„’5^ñ÷H4ÍH¶IfÍšk «õ4+¦Â*[Ò¬â[‚šŒ\?è{Õ!LXªýlÏi´ß0Ê6 'Ï^#ÆX$AÖøšï6F2:½Š¸I“ý`áDHs³ý/.åf´YšC0C¹:GuÞõ÷å¨ÚÌÞŠ»©¸YÚ{uÞ$DX<ª‹Oyá~œ€X¢ãþÄJ~$ÐÅÒÉv˜˜%ž ÿ\Ȧ$ïI–4ðIÂIxҽ&†@ò·§.[Ëp‰Œpåó8›7:p¶îN°íU¾J]Ÿ³WGéœÿæF«'Ðrµa‡:‹ß Jï}}zàRŒ7éîï×j•æìÚû#ÊùólƒBˆ ªá› ]£y‚©Îz—Ê'=ž_ã‚UЋŒµûNÕ¡¦ÿ£Î¶ÔK뽕‘Ëö¿‡ï+½Ù*‘ÑM»P̾‚é›Ê9Õm°2`Æ^2oÿ‘2JêItÈÈÛ”ï&=¾c܂ҡQ«õÎï’0$høØ Ùž‡ÜSEqýíÂÇÃ6àÝØ«ë<0 {‡ yÅìë DÅW éÐÙnyR"ƒ_⃽Ð_»~! ¸ëAB©©Ó‹FoͤÑ#æÐú¢jÔ´/‚®#õÒ´Ìpõ¼¨Ä؉ˆ"·º³™²J'ì JrÑ‘NBüض´;0;÷=3]Çœ™¼Fô[€ ßg eÊW_*Ò&žy‚7ŒPZw¼»H½`¯´3•Æ£¢õ<ÂU4.”ùOïØG ,P8õû€¥øóÉZúí\^8ÄÇ&ᤠv„ÒŒMTÓÒ¿Ò¨ÆÀuê‘ÂmJNÌ~hN -`ººÃKŒZðÀxÞ“uœ‚Yy¤H2øÜÑ;¶ó | åæçÛ<ÿ”â[9Œß£–l8Ù¸eÏKoÍ'T „Êå*È1æ‡í‘ÅWLi4Û0Çl€yRÎ:˜¬Àúÿ3ÿïc¯b¼n[…4¬èqýdá2ly>¬ÐtëWõVáëƒJÀ!Ó(, à®x&çüßdYt²ÕieåL‹~yäîÝFùa>„w=er–™ÐYf¬F»Åh4<$óoŠ„wÁ¨Æ„¦ß¸MQÀeÆöíRÿlŠ‹‘þ ^!Ñ+—øeÆ` Æý=l ¨;có³8øÿcõä`ÖÕ®ÁšÑ§rëý’˜™Þ=½­9ËKNHv­RÓeѯeÁœí!t¦ÝKç´îˆ+íã¡>Øž rNíMòe±Ê°ÿ+TO0„’v ¤a›§äcŽ;I¹M¦—O ÕÏEÚGYFæ ×-hf+hs„Τôzh·è^qª/+ DÄ×ÙEœ*× Ä6Ù…ý.¡ Ná}OÇ™f=ﻵcm/Ò»3–žíÂ5Ejpý[XØ¿ HÛ¸|X…-àDÑ1AöŒã˜ç:lŠ'åm¼™±ë¤§’›à|*V§¤Å×Ò# ¿£6/µV™ZÇzsÓ«qû­PCìIÿ i‹‡ê¬‡I=×->9nÔPtž—ö¡±uIv™c6ƒ=ž¯iF”ËÀ|Û‰y´aY8 ™D´Þ,º¨Þåf˜‰tÿš¾Lߔª·i‚¼5Ï¡V9XåZÏÑ’êéä öCAÌfbn.‚ÍÔXæ,Ÿý§oq³OZuiŒ ¼Þ2ÙÚUîåfèUêPH1éĺœ˜Ke-& Gü¹6+æßéZýÒ^ÈÁïšlÚµá1ûz/É9$eä^È9ê|quCº˜‘Œ„„Éɲ?ˆ*8.î4j²/ k[2»_Ü×2öSm]¯ˆåU±7á »þjðù w[ë# a¹@¢<ÊÔœd“d?¡ŽsQF Þ¬àžQ|¶u]­‹ófRÐùü-o‡û‘íÐ#‘ÇåBÊŸ=8¦iݺ{‰(($Ú$-27‹fC3²·y`O“¸yÇhåÙC©EMùøéÛµ©ÿ©O  €ò—LJ"™àÈ=$ŸŠÙÃèD-D£Ù‹¼‘?h™XùÚÛ‰EÖº·h?ÿp||„SJœ%’m{x"L2Aä$°<Ÿ“нÍ›íåó€J¤­>Gg­KÂ0~Ã/‚jP8Иóî"µ1{X¨n_ºâ¸W¢V¦÷Î2Ö öÙy¥Ðþ¦;¡ýÈ#c->îõþˆnsŒ7Ø´ç«l™|ÏI{pXÍâ=m< ¨gZ<¤zò'úq>𠣓õUOl„óÁàÙÒCŒ£@Ùœ:±GXzÛIª>ÿœèH˜øÞßx‡þýùK{i¹ÄdžII4Ò6AãW}Kùâ]jK€”e”<9½ò4 HåŽxyÿãþŽÓÞÅì,²->‰¹µfiOäVu“Or' .8¹bWÜ ¦É{ é^~ž‡îO`ø{7©N7 Nè_×pìÆ“Ê™0-™RïdV #q7Vbxð›’úÝ„hô—hrsØŽ&Ƨ í¸M´o. Ii…ÍRýb£îiö¤<î75ž8±èsGC³—LŠÆ}ì% ^ZhibÊÞ*_šÜûÐüjgþjîþmoZ¢Ý·0£Hfw`ü  ÿ¼‚,ÞÎôšžz™úµ¬À‹ƒãÙÁ&â¿Åà‚e2bi­ƒØ á}lþŠÞ³ôÑäú£Çp‹Å+IÓPÆÑœrÈJ>†¬(8ž&ü®3hÒ“0%˜s³.P«}¸uñ“j…G ƒØ2ûwêÑyK‰ŒŒG p“½CÎ'½Í^}ìé~Åe,Y#hÙ>Ò!p/©DÄ(¸åøô?¼Q§ˆAƒ(vñ†ðK…ºyWôi w6 ]ùw_Ù+VnÙ^+ T’{ÅbµyU„ññvïõ¯Ìå_ k fÁ×êFÀIà(j >È: D鮈0NAÚHYû]1Èø§“;s‚Ѐ$ªêï¢_Ëv¼ï¸ÏÖÕúïÝQŽ÷´7WE¶qÂNÖ¿¤Ólå|%¨÷7oNx µ!“«üÀÜ ý/ ÿÀ‘k±7d0CŽ•eà@ކ‘°0ïJÖ5 £„ÓØŸ´÷b7“¬ôЂã}ë ‰%~Wzï;ýSqïý€¦ˆRçÈJlµààÞTHYú¿ŽÄCDâÔ9_¹ÐŠež½ULûÄñ­´kŠ@F¶œ '³Å‡™yYÿ­Âïj×q)T°y¼¡U0ù³+Ôb€Çƒ#$³G8ÆíR%0e–<¸p]ó–+ßõå—þýTz5¡æti…>º&•²TzhÁ¡àp¼|™4¢öd2ù‡&ìÒ©€"ÝP›UáðWZ|¤…²è&쮞Y=©®¡¿’,Ö@§°ûùLúR–:^üÈe&ƒÇTùï8—Ï¡ñ÷VŠ-¨rMq+V:\ÆRŠER«†o.رåD@œl(l†åi}pG·ñ5#ÿl]×Ä·:@Jü­VE‹Œ¬ú¡ìØèÇ®Ýuûè@J(ݹ9i©)qR`ðÏš7Ä£^=àg’W'«Óz,Óm;²E¿`V¥Ýý¥—å…ÜÃNcÚSÒF,€O"›NËÅÖä¹R¢nƒ÷t-ir*rÝ÷YÞ¤$¬hnÛçqŽãb±ÞüÖ·4‰¶hš‘0¦QMq…>‹8$‹Ø½Ÿ@%á¿´e¯Æ ]æµ!$¾ˆO|c•-/µ{”ý3¶ûÃ0y×Z?³Ëë¹éëFùs2(«SBzéÍÆÕñ—˜XÖ„<=u3ÏŒŒYßdazŒõT'«äô"• oá?­Ó—^ni¾0Þבøz˜Ä{=©ðÁk¬Õp’øuofQ–÷¸æ&õsÏ2ÛŠñÅd qús^´1.±Á-ì²%õÄù–ýºýòÿŠà°¸åú$Ҫ깯Ò Á´xÐTpû~†ØN¢Ó-_sÈ"òŸVNË×qŠuÕê;®œßƒŠ¥Ýý|ÖÞ8s{³t<<ì§ Á:Ÿ+‹`èaÞÑ(SAóLo€ ޼÷þæ/FÒgy³}.q>tŠÊ¿—0pŒêÇ©w±ò/:‘ZU¯‰îº®€£ÒRÕïòræø¦™¢EÀÌ5LÈIû,A[0ëGÆï‡ µâ+©$&Ù«ªMæÓ-×àËv#Ú»@è•§ÈoòíÓ‡Nä™'Ú]ûP°G ,Vi¿Øçý¾mm ™ãýÝ1ÙZÓGÂmÓ…Œ\¾3f_YZ%[Yq=§ür×HGûœcóªNÞÊŽ°ÙØÙjV“ ;zßÝqæ=XÂå˜{03†ÓÔ¡¥kO¹kìÅÙpÛ¥/™À•FGe!ðIõ±rvÉ”#`Ú’úG¶n„¶Ã,J!áe•ÿlHÂåŒÓ@yñNMÝf)cˆO"Jârô±·b¯R·Äù'V! `Äo¶½q¥cB‰8 vt!?<æT2ÕÏ5~‡Úø‹ŽõeEè¤NRçhÕæfJPwY©K_jç¬OiÒ|œ¢‚èž»[»uQ'4Ãó1ÝMÉg9l¡ø…–ß.—Æ™{žNÛ Ãê« Àò¨E¾(Ÿæ¡ScÁF,X6R…käà&)Í{ÕqÒ‚¸x¬†2Eôܶ{¢iäO¼lÒ-*\¨f¢]EEܬvë+t7é_òý³8ˆ~.AiÖqÛqsn$\$ ©Ž¸a‡vÐÜ[ãŶ;ÀÙEªËå•=jª»R˜üöÀ§m#ÜölõüÞt@«‰ çŒE~8>²µ6ªçÔ 䈎¿=®û{åT§M´S”Ч¥¹–‹~ƒéD¨®Ve"&3_öZ/׳Ò\’q“އ(’‰Kl¼âvs­î~MIÍ-ãÚgíØj½‘ùªüPvEOÔ ÚîtªfÁ\Qt³pû#@|DÆ.ã÷j¦ƒ¢Y‹3³Òi3¡÷ù'ÛÍ.¿2­Éï;Y_ÞË&‰ÐÙ'×ÉŽØE`æÈ©äÛL%ï +ÂW.*†£øk©´f<™ŽÂùîVjæ?,FÐFD³Ôá8ë5Ы™¢®N´ÆNAö¥35â—=ìÂàטqs["¤âüˆ/¼‰Ÿê÷›¼ ¾;F”j÷5áì©ziºïHÚL7¹—éc™£ŒîÌþ&VL¶8bHC²Ü[;p=­wÒUºO³¢ .YߟQŒ‚6»Ûs¹i¬y"ÑX_Ë ]\ü„Ï1Ì ,{¢$½ÉN3ŸÍë•Dð·‘Ô82}nFÇ’ø-Ìm;2Õ&Ò &Ç++nÏ9IôûÑ™ãCA寬Çr«þ —/–„ ®Wþ»7dy7 (¤“Ÿžðº¥YY"íøU°YføjIŠ †ÊogBL ì« Ç›R«„ÓEÄk+œTõÆ7®»š”ÿMg7:"¡ é²ç_¯‘\#Z¦«¿ÙH¾ÒMª3± ìîý&!YßD#ü©82àbŽÎì À o˜L‡‰þFÖ³ÐB¤RHbË_bÑ“ Åþ}ùÒG½ A³Ô†Â4I&‡™§ùLH™®,?ë9ç³Ù‹uØ$Õ÷‚¦YÕ8þƒ›º tŠY-ï»…j½ \Ë4ÀwÄ}y1lâðâ€ÜK>X‡0lÒ¦½ÀM'—þ…›BbE©zsŠ&ÃT¼!gÿ€‘=;'ü¢ (K™v®R¿¿±ä…ï=G„GÄÏ(”\¾ŒôQâÆ|áó̪F<9\‚º6‘f;åAŒK·¾ÄL&ðË–ÿ¢õú @i09»:•~} “œÆi.Ä!¸c"S𔀪Ÿ]¶ÇŒ'ôŠòódsžÑûU rF–Ÿ7ÆyröÃZâ6.‰Ã<ÚBmêmãœL:Ð1Óóéú8ň–#PõEpbù+H¥j*r†*)_ZþóðV:T*l¿:´.vHL¯±Â:ÍU•CIþá½²™Úœ ö ærØ…å5ôDØg'šú ~“JøMÉâú:ßϤⷎ‹à®ûHì °¶àE–ô††KËÏ3Ó„`åoçøü櫺¶ ŸFùPmL…u³\°ãÐ/¥×ëIR PÃ{a.ºSCõMÙ§P Ò‘[MLF34ñJ?¨öžOšEeqFôíBÄcß+?+ÙÃ¥‚ÆÝ¾Îóc'ÊÖóÚ5ïÈ•/H_ˆÏP‘I~›…u¸Ãpæ ý äL·“Êc”Ü/«j¯ªåpÑxG㻕/ÕúGk¡¸=ѲŸæ…Â7Á-G‡ÉwâšÕÑ ó-)âÙ4T¤„øpüÝÐZó²%ÄAîXw1/ýq!¼W˜­ìÇ ï?ì á°]DXBçµo€$Œx?¡Êx÷›3~à÷³^Eçì,èC½6‹•9eåpyÕtÏ£o¢\ÛMªg&r‚Yí70yj—Ü'ãã9ªÛKð_¯ˆ/nf [èZ 0°Ð–Mˆ$ê`iŠmù7Ç}b4Èã`3ô Üa­Q¡ÜŠ’}OY’8ÂO³ªË¡ñ þ‹P8+eíÑ¡ºD>þw»OQ2/C-ë”Ðû W"ÖàÞ´Î ,- Ö©!Vi_°»°èlm ÑÂ:‰zzÄcƒø–ÄÚñÈ)‚2¿®Î¿šÊó.êo}B£¹æÖï#êúÁ§’=®9ïÑuŠ«¤®ÈÛL Ñ{h¤Õ.Ë0Xù§-EzWÞ<ED $#µÉ7BvgÇÁ¹ ‡=¡,#^íœåÄú^ýl³¯Wób»×ä¯@h_ŸLéqñ_c É4J{ݹ”6ZNn/ç©“ÜY"ˆMø©f6ðzx7Bµäœ]/&vš¬5€ à¶ण–ªgbmrÑeâCr,ss1¿$2±ï? ÿ·«jYš‹Rô1o/¹â´ï€¡QFFùïô¸|÷+Çz‚zdÜi} áG 12ÑA£¤ŽU >Ý‚jÃ+‘7dMûïÁAÊuÑ{²ÛVË…­jpêK6‹i‚SÎûÁ¾#¤Ìþç$î®T B°RÌWƒ5è ¢¡{/NN¶qŸ¾=q i¬«6R=41#¾U{ù‚-±à¢‘‡`µ}aû3ÆGæž“B>ä:Â\AÕ4ïLlD7¾ï½)ûµ )¥ÊB+¬¤}ZSIȺâ뀦©Ùª%+Õ j<‹ICÆ% 2¤ÇÁó³²%—…òdQȶ¨ÃÕSë—6è¹ôÕÁ¸‘ÒS¥MÙ[S P¶\à‰+…·¦_aî7€YÈóõ@ÓÜ!3n®)§&•ÅC€‚9÷?²½)–’Y5áþÌVÔ7Eq#gÉ’nbòÉ2&Wm À™<çV6{ô!ßzJìéõDp& aûoÄæ@TÒ°º?yª¿Ê UA¬„þ”÷«mÕÄ ¨ E‹‡"ÝüߡɉÅZ–Éèî™QF:Ô´}Ó]µ“NRî.}€5ŒïßÁ_ñ:ÁùiéªeÂØØ” §V=ÅñΣýñ7yÝõ°ÏFb XieN<}::ç©x¾gƒ¬ÿ$n4}ËÀ”/KèJS>ìºUö}G ž«»“)1—pñv+äÛ.ÿ^Ñ9ùô[íTwëZiP®ÝQ8lÒnÑ»ù“ïé'á7}¿kŒÁÜ“?]"*+ÁØsHò<1ZT ™ßðÎ4b¥÷%㛣^¸¾‹°éX6¢ŠQáiìdÍ,ÛçôåÑüN©¬•‘¿Öl‘•™Ÿ.Oì1Ä.ü£«ˆg¿i~¶ï‰ów¶‘–Øî¸ÜéŽ2Í;D%s‰Vã0ô·×ÇÝ—b¶¯èV—(ïøã½jÏ]ý9¾ ˜5]¯p¥ÏÝ–’ˆ’¤ Ý¢²É_yê:í=ÝÝͽ ýWkᮚ˜j§Ä¯¬šª´GÓÀCÁ; l²>ƒñcçAÇÖR’‡ãcÍš?Ö¯3¹,åÊc¥.=t³õ4'§P}½Ë/ÿþæä†!!ðþ*yÍ"%‚ÙÆ…¤J>ef0qVØ’÷g<VïÖÂʹìV“ížOÉMà<¹.ã#Ä8 îš*¤è Ðl‰ð´ô™Å•C¨?à0ÐŒÉÿ|oÁQï1dÖl±Ü|R*Á0¸?˜îâúÒω³S,ŽH€°Ð0v¸U^ø°³ò({aS´~2¿‡¢.½‘ ™4ò€,&?ñ/¦Hcè/ÍÚxC±o`¾C‘Á3@·c“¬újìùÙLLu9[ ‚¾kÇ-«'KxÀFD" Ûjá¢t×øVƒ‹ØYú–‘“mâ+Ζµzäñ&îßÎM´4”~_Êch9!¢{}Ä×Ë•’8¨\2Ö ñ F><›;¥8æ|ÇfÖÑ"—ÑrÜ:‹öH@ÂŒŒè(š °žÇÒ*.΃r¹¶•œl„0kO¬ÓÍÅ»<â‰ÑjÁž7r:‘«ðú•i Í¥Þ*ÇŠa' „Kw©rLÏ´]o€c›¿4¾%Õ”ôt0´Ø`€}t“¥9>>~%§GÖS M—zÁ­xêÓ Yg'ä}ƒf)Üzµ$Žpq˜m?dÅ\pFÚ®å³ã’Ÿ§ÇC³o w“ÎH:¯–IìcÐwÈü“ýtÞ‰¦ö$þsû] Y¾«ÊmGD}Z«T .ˆ®¢®ïú¦éh!Èûû'úôP±9÷ às¾õJÿŒ&Š}‚…$Å‹,PšbtÖ3Z·“†u4ò. >ËHÌ;Fa-Ƙƒ29‹€Ì`Ð*I¨açH»jLï`Q3“h"ÁV¸yÝLgÀkXx(ØF|BႵ®v(‡26¤·<"ÄåÔjO¼z°U‹TÊþÉJAs¥QãÃK‹õh]3 ¼ ‡¾¹•ûêâÅÙWŒ¡ÓþËrÍ(YÁÒWµÚ+qhÃm‘,ù”R1‹Ïóű׵véäÊ~ùø‡b¡ÕÊæÈ`‚n(#|ÿFŒ*X’ÌQÔÚà‘Y(º'sMw³ýÝŒ”,lÚqG ÎošÂ*: hOà€wÖ”Á"sZ)¤ý‰„(%l î”==±” Ý־ŸèQ³fêäMÐåEzQ÷,MG¹ù#•LøÄòi0|“:ŽÓ;ÅU§ãz÷î…Cy4ºùr8MÑNðí‰,Vº¯MlIà,B“G†ÍêÂr®ºœ,¸Q¬mвáHH~·WK€EVœ,|I806ñ33.$·¢ž‰3hF/忯å.îŸs»£«è«8^ôÚáa¾’ 5â–°íi ¯«¬ €Ì@+™; ²Q·\¼‘0:ïLr/%\“¶HÎÀ%+l6úc,÷–·½g!n£E:Íhh^,cl€£¸Ví“ꆢŒ1ÉŽª×ô¤Ç_sp"#LQЧXôúêg/JR2G@™¬Q$ÆmŒÀº_õs‡Vsû·³u"¥°ù×v}\IŸ„Oè£Y†.Óc‹¦Û©oßoOhcSòÞIœ f~nN¾rá£Oæ‰õa&›^C¨¬Ýq|ÉûšúäL—¢[ÜÁ”"…ËLjå!,{Ø$»Cè3s€{Ð7‰hPÏ·°QΧPâÖgA‡U,0Äüj6V<ñ@Œ]ÀÃ¥'4Pª7f)ùyGç“:vÊ!Èj‡‰ø¡5ÕhÊç6“³ünÔ’p$Ö+-âýš†˜Zø½º©ìT> ™Ç]r©–˜Äva¸Üúû£y£ ú¯‚²ÄUñ4þË\<ºÅ–AŤl§ÜËeþÂá ]¼@¿M'o/7H$;ŒæÞ˜¿ÉÇ®´a9¦¹db÷м0JTDf»â§I×eBéî?¶Ÿ›ÁÈï¼ïˆIä¡È1ö»Ð’€?õ³¦±8–â5ÚÚT¾XÅQ`+|rkºPš¶cr1°g'%j~\d—»@+¸X¹D·ã­­Ê¥b²û΢‰wÉQÓß.¶IIHV^¾Ù“lÛ—L‹w½W'bÐW¨Z´Ž#yާY­'÷ÇVãö}LE;³–‡ÜäoÜBxÏ*à. ¶Ë†JK*<]FT-'ê.øÂSkn¢Ÿýù±µmÈÃójBÆûsÿ¬w ¼˜WO]ÿ17ÝÒ’%åþ¾ƒ"zIDŽÚøCý3DhNq‹êÔIql¤NºÓâ&µ;¤-üddÙuHk-.òH¡áYw!„%,q‰UÍýt7…Êæe/¾+Ù÷±œUV±˜|°ØÌãDŠ¿1›fÒ(ö8nU$æ6›Äþj'¿v°¬ãá”î…¿ íó7JRž€Ñ™6«iœ'úf‡ÿñFXDÇy­ÁUIÕþ@H¢¦¦¶¿PL…ÖÊ^ ‚\þÙTeâj[Æx 1‡™3† 2>¥°B•¨ÈOž9L µX{±—¨HìÈõ±j; |2eqØéô²ÅvYsc)wøüÕgô­”ÜÔtœZÒôýràÄ8Ïö¹õêšôÓ©IçÖÃ!È(ÿ…ÖW<¯ÊÚ»ø—w4 ¶>z?ßmô·-ùk ± ¬»éN¬ùjªøŸÞ¾H–%%A n{êCÄ+ëEW(°"ÅëÖ-Œÿña˜=Íd‹u’§zH8Q¡ó¡¥×[Àºä­Ø_R)±›Á§¤ù–l0/ZÖæ‰OAÓÈMøëK¸  ©Oü®¡œi·ÉµÿY^mŠÔXdîDYÂõÏw¸Iý—ÌŽ4-vZ¿FÚWëZ×bùlÕ9 ÀgZæ"géxoã!¾ñç’˪”!QZ“û–ðË7DÑÏãäÒ~ è×TÂ,«¼ëСW¼¤—Ÿ¶By¶|ua¨|:}¾£ÓƒlNB# E9•½»û¥o®zŠ=¹ _I™‰ÈÔ(êM¹J}w(Ð_[JP›Ì3©%.±hsdù)M@ºÃÐÕ/åŽPPÑ.™ejÝoc‘Äj‡ÏÓvie5a;QÉ&ÁH¶[W^‰&>5&¤ eÃ×BSH¹©b‹*Ûd[@ÀÅ'u¸Dõ| .ù¢B €Ï…oÐæ’áÝœYgÓ0®!R“èaxT|…¢žG’Í’GÆ wH-ïXÇ>6Î(´{~UêA¨ïóG aþPL%ßPu³- ‰YåòE1gõþ‰ð>\öÁx(BP®Ë9¼B *ÀŒ>Æ£ñãeñ Éà^[y©¶×‹k®Éµd†•¶¥ðžêˆEDp?XhV4g;¹çC›Ì‰I/YP¸½ÿTË&ëÚVg ³iêÞ—&º|ëfgÐXzš¯<=dá+BŒnO+ ÷LAhºÐæÑ&Ù¥§%c?åØo0+…À…5uÛíàb¼j}LóëŸàrñ×’î“ ¯q7ÆÐéZÅNe€«…ÍÎ/Ó®$$:tº#j?ÑŠ6=#×)i}³€¯ý‘—¯„Nª‡2Y*ü0¥ÅÞU½Ex=ËnJ…·þÿèýÄ…*¾ÑH j‰²xêÚÊ6J`†Þ±tdA@³ß"ž_ív·ÅüéÐáer„(ˆ7ºõ% \m,¼ã z£A…Ÿ<Àa3ÌcH©°ÀlÕѰ…ÛýY^Ù ô§ˆš)Ûѯ«È™“öË"Üòáý¶Ž÷ãàÀì²1þkŸ€¼¤ #\p´Mº6/.ÒÖYá&„h$PÒ¿WßhnmÇ–¬¾Ý<_·ŸÆºAŽ÷Å^Ý”"Bÿñ¿ š  ›Oµ˽áÂ¥ÔñbÿªR’üš”~SÕzS•@pMzãÂþê8‰‡â:äiÜ:WlÎjÌ’¢œ»br÷ÚsU‹£.³X8ÃÃ×tJ„ËRMfµ‘í¬Ã%!Wïyd(@CÖ/¯—áJ‡ÐW¾*4qÉÃðêê“Ëw÷ãã€UÇ%çT¾ò^]¡3èÎ%´Í£@IÌ[ü'6ÅMô ¬Ô¼vf«ïØŽ9KHŒŽÃŒ(²Š~@Á¿ÖöOâ{·KoÑi º5¾ëaë0(ŸW®¥¦~Xôx¼ëS 5š1TmVr…þ¥¢9èÝY‰*º’~Í+Ol/Qèjnoà P<ž“Ü endstream endobj 428 0 obj << /Length1 725 /Length2 983 /Length3 0 /Length 1539 /Filter /FlateDecode >> stream xÚmR{TŒi_”S#º ל7vÒ¨æRq›­¦».“¦¢‹úšygæ[3ß7¾¾™šä’n²q e!!Ê¢‹ËnDbR.ɶ ],IÛîW)gÏÙóþó<¿ç÷œç÷üÞ‡ní…c¤@­€“Í!^Ç‘Íl¦Nç!Qó@HÈáPB pEáÐ耇+Ô*‘’ÀVÈA˜ ¡r”a¸ W¡B)øN¥R¹ªâ•LB¹‚I5…@H)bT/ˆ¿Æ7ÐØz†oˆA‘¾2N† ?*„X‚Ž\Ш–Ñ‹œ¯yBh"ˆd3‡N„=ôF£è¯,ww’MÚoë2­Ó¢f÷]pB²éôÓþàCŸJÓÖ¾5›%¼Kï&óš›¶ò霵;Nû­/t1÷ædƯ¬24{¶ëQý{Ì›½ÐbÄ  |aWlV'Ý~ømÜ÷}­MãSó·=7yGŸ#=\´EÑ–‘ÿâ=Ri®?5½k®Srß.åÙHÃ{š}gQáùÄúy'³#õ'¹OLWù›xs£6¼3L%3½>iÀ²Èƒµ–³œ&y»xåžT*؇¼*•?Ò–ôž}Ò"ž³·ª6*Û¯ÂKºð÷¶S,ç9™Õùå‹¢çÑËá+:i¸t‰ö~ÿßÜOq÷7NK×Î)–”m>['—KxwOUþ¸€'Ы|síÁ¶¤ Ëwpj«4É×*6kï–Z«<=sª4þZý½Çoµ–¦—•±òô|Xou‘LXî³S÷G_b3˯ü²PrñŸ†×ίubÝŸâž—uìóÁu' E¸Gæö®>«•õãf ´fÐ -áS‰UÎÓ^¬?Õšñ‘¯p‰°™vbr–ihFã¯éé~òkS\>ÕQ´øÜKAÃà­Â¾3-n¸²¬ˆ[ñ¯ªñÿáRȆ€æÞ¨¼i3Šn—ºØj';Ì&¤©H|õÎìIîyÆÎGs—uÌûæöÖì`#×7XÄÒ†ƒšK_ÒíÞ×¥®šb»Ðõð¶Fãº*÷ƒ!Õ]oÚ®êÄ÷Œm5Q9¦i1šcF‹YâÀLWÞÌcôŸ§¢’ ¹Ý1;X¾NÓnªm*·¬Nê䆅ǚ¼ˆ.ä— «¼•Ã÷%wêaSq™EMÿuAëÀ„Œ áwÑ”dÆÂhµÙ&—ßnÿëݺ§Ì`²=:x½«|­ÓÄŸC<æëƒ>í·_Ñx<ʇLLi¿ÖÎeÕv˜¼:n÷÷9«dÍí¼ê)4<ð¹ßÚõbÒ>¦áBÉ*î|ÃÍz<áJZœi–Tõ+?ibhòh;Q›ÇHÉZº2UðàcgKàkÞæ¬Ê½K¾]TÚ±5ܵÙéλ–3d0Ò­œ£U›Ùêª×ÔOému«Ÿÿ¤€ØóØ%BᎫ;“J¢gx\ìþlÐÏT»uÞÖÞnn4’ ,¬7Õú™ÚE˦PæûsŸÎÑš-&'t_è r3j¬™R£yz xwÓM©>ÿ½¼¤e^]c´"Œ˜nI›»ž¼“r¦V)¨öa?sIÏÛjõÒÇèÈJIw‰æåE¶îÄ¿[.×ã endstream endobj 430 0 obj << /Length1 1608 /Length2 4402 /Length3 0 /Length 5208 /Filter /FlateDecode >> stream xÚ­VeX”ëÖ¦Aix•†”’t˜†A&œ DR”’IIAA¤%$¤¤K)) AAáØçœ}®ý_çìs]ïŠç^÷Z÷zžkDΙ[IkÃ0.ðË4A,#« ˜!Q.D¼m"­ƒñ€$§"ƒˆˆ.! 1h=® ØÁa€ ÈÉ`@ƒõÁ!n@ÌÆÒN\RRêOÏq àâóÏé$‰@¢¤O¸‹‚£ $ˆÿú Üà€+Òè^5w023Ä Ìl8ŽƒxæD$0ABáh<\pÅà? ŠAÃÇ­áeHXÚxà±p(’t î …cCRŽC!ñxÒ7€ÄM Í€€h¨vL€äwÅœÂâ0¤ )F3Çà x(‰%¤ªæz—ÿàIpƒŽk㑤0€q%eÂ0PâqK'1 )J€ Ñx€÷&×r0$ëñ!Õ&aqÈD<ø“€ƒ# 8˜'Á°§ógŸÀ¿uÁb=|NNcN²þÅIÀÃ=\eÀr¤šP©6‰f/ŠÚ€eÿðÈØÆ<ḓ‰ïŒ8‰†A{ø0¸+È C •Äþ;•eþ>‘ÿ‰ÿÿyÿ7qÿªÑ¿]âÿõ>ÿú2ÑÃà ‚"-À @zað€ püÆü¿\ éáó²ÿšhÿƒá1"@HcÐF#HRÈÊÈþáDâ/#½á0s$ê¸Bëq¡9 ¾‘ÃwWH¼%÷ôGÑWÊ’‹Á çBæÔ5»È;›£&3T×”dmg{-, ~Ñð÷¿’ÇÑmîŠ yæ² ÿÀžò‡&WÄp4°V’±•?Y]_Þýq¡½»³ãMóWê–^ÉÌz5§â깂ÏMÜ·—Ðß^ÒÏU3âCûÎA[»hd~– 3¾¦ZÔæÕâwÛpJÑŸy­þà?ª»Ä³rE®Ÿÿ…ñÑ™ê{ÝR•ÝÀüõj/+î’þ<…ƒ"PC°ò¹´ÝÍJu¿R„W‘Æ ]=jW'æ>=@‰ð ‰Â1 +ˆd&ø»·Ë¥Ê -ÿbäó¤GØØ?7`äþUçzÎæêÐ4sKãd7¨É(Í¢—×Iy¿&wyƒEæ½8*jm˜a³‡õvñݵÿO¨áï+mkW0o(âS2°êÕ£‘Hé$Šc;,Ç´^|¤×O Šñ$ó Ïêg#˜ÀJo0ëJû0jàuQàOëãU‚w{wMÊ Y?cùÈWì[Ÿ÷—‰­×ý ÜϘa7™ëÒ´1 Tº_¹ÙÏmËÉQèݸöÍðöÆx"JUcŽGažb”÷ÝÆv…ªë}ÐfDô~ÑÂ|gLĤSëaÅ7¡€%qÉNÅ ©~(øàfU™f7|ŠúU©c#Jf×ä*;•PÖ‹KîÙåW¸ö\ÏÙK*/VCS92L‰Tjì’­0³ˆÉúuü8åe»?@­EÖ›”)} uÐ,iéª?môžOt™G'³_«¦›ŠSŽñ>k?!ögI« CÓŽmŽ7ö×Ãä{hŠßúh@‚ ˆXè‘ö›_³¹ô«×΄y}˜HPÃsÝjñ§< ©‡G;ÊSÏÇzŸN1>¤W}ù.˜ã(T¿û&ïp>¸ˆÍÃEîG çi¦oåÿúYËgÑD=\ºàRž:—Å,ðñEtJØ[ÿhÕOMzu\l×IàìoXÜ4^Ûýa¶Þ†¤Ö•^?¯U#gȃ*ÔF(öJpáµ®·çlkdÀ#EU«}¬ícœªö#,4ƾ:ö*Bª(Ÿ#ÞÛåûn!¡A‡_~—×>±¹Â¸XGöæLvšÜAxŒP[`C§LÌg€ž÷cØùÔ䫰ɹ¿—n QeOm“.·07±|Ìú¸Ÿ fiϪ¸òêÑC÷À7Ìvße‘¦ôÜO#ŠA4CoC msóP!½±ÌG’ ñÝ«Aw©óaÒûu¼[uë¥Èp¨(”?¶hË‚ØÞ 5*ªÐ&W‰nA¼,Y½ýp—f]žÃ*dFÖ7ËÁ»I«-Ãî£ãfäÅnB¥jËþ£,¡Üíß³õ\3ò^Ŷïã Æ]f”ãÛ‹ù>î+7­ú/„À®VžôÙ!ðŠ»ÛoU.Üýò=¤^DìSò¸LB/w¬çúšÖ–èåõé­X®X«ôcÝäiëºóÁP®W-1QÀˆÕ,Ó2wŽø[~:b¡˜0?±S†×-ˆäÒØ­vc ëÍTÓ?ÕÊJ'œcʤr‘ÝGíùGn~ó[þe³O£›Ú›ÉgÇ®mÓ¿+lj],¿ñPT˜–šŸÕ°b¤ ͘ß,OTgUy}JLJk¹·Íó±}¯—ÿ³+Ô,ÕÂB…‚q²Õ=+P.7ì´?(Ïe¥ß8»&ѦÀÆŒEó‰ï?¤Ç1Š”5 ¼ ×¥^Ä@ÜÚY†ÜBó#v“tµ©OÜb:ìU.P~)¶NÝϸ¤n–UEþTWHðLö:Q@x.üü’‚:Â™ó”Š ·°LA1o}¨}WÛ|!w x®VLr×Ù$ A äƒÀ,r[™oi˦ÙÅ|åfR¹+÷õ…„[yÕM­ð^[–jægÊU1àxûö!5`'øycÛj‘ôpgÚ*ZòÂâH‹Þ€gÜõ7ÛˆVL~«Š?÷ÅöÒ¸eÚ1‹:}æ’$;(/¼Ö9ä§¾5òA6žCA9(}ÑúPtu2ñÒp\M›m@‚öÕZyÃûrbåmKØÅâåÊŽú‚`âê·ÄŸ 6jxZ]·÷³WcŸðŽ©+fmÄNEЇàZì´N.ÿ^ô½Kâ)ʇ\¯gÝ6<[|ûµWïGÁÝ[¿%!évxYÉy2“ÚòsÈ|Ö=­ûDžvónݽÉÛ+6›šù¤Û K>{ 2A.ÙOÖèh£6œ¢G„Öaïbm`óuêsÕ±š5<Õ1ÏÌÀ·ÆÅ¨z”F!á÷ó1ƒç‹¢ÒX‚l$}l8öGÉ “µ¬>ÔÅûߘDœ·óè7H•â­aWox¸Îþ”£ü¥;òÖƒ’n/P(ÅÇĈ°Œ Ü(Á‹8Ö·²$òR‚ó€SœüA‰Ÿ÷½5¿Jë bÂäÒ¦ºÀàñÄ… ïÚ[O… j&!ODš”û?÷ò›Ä¨E‘þ˜]sô.Lõ²+¶ÂT-ã-Æ*Ê%º˜ÏÌ×o j† ™,ýhíÔE…_JÊ/½§PS‹<€x<øé¢¢oKÝüù†¥p\@Ê6ì&·1ˆ³·Ÿ±Ó ïgµx›¦á@p â-ÿ„rø ™&s-¬§8G0:Åiù±33žXçÜb¬Eu*<½a9UÁÓ¡oȲÐ~\ÈßòõÍqôlßÅ&J‹¯¸rýÑek«µG×~®ïiyýîHnä59Sp£„›Bõpò{…Î-¾–Ø#:g§JÆ –|q%9A5,?mŠ>ˆå´B¿³0˼E†?é¸iv×0z€Ci¤vù"ä…z÷9l ë:™‘Þè‹PÑÑZœ]Ïìa£@³R¦gRWM‚v·ø†æùRUúçÉšÆ÷stƒ£]a¦¯ëXc4Ì÷[¶wgA·YLjj3ö°Áž!eðùšzÕ±vTŠïš#Õ+Êšd“Òúã¬éÕ øuÞ„[´•sìa÷Ǫ~¡$3¦¿æ£~ár÷M–Ù, Z×TFt¦¾øÞœ©‡~cp – JrœŠxÂ÷±H.Û£‡AålWwS·®›EP_ÏŽFÄ˱S”t‡•£d®®"ÍyhÓEw)Éú0fùg ÃÃËú¥IP¤OÑ;«û›!ƒØ³‘\&kÀ ëÝv½q…óÔæîÁwEoÅ{4Úk‰džVŸ¹óyÍw°šz­xhŠK`‰ã­Ÿé/C‰ W×”B՘܆;oF;\Mßôs¼«E”e¿ðIŒáúœV'»vÙDôéˆií›dóµÂŒGΫÞXu4è9›3±=ÈU3ÿ•K0çêØÓ˜è0[¢V`Ø¥L¢àøZ!1ÊN6–õ54g‚ü2/¦©UÒg;§ª ¼8ã:QZù.ge8/;Çso­²m8ÑtxDkQ5)„NÛ(+«óþˆÈ-*Œ¿Ícaç/£§ppüOm•ñ¸å›]©m^t¹àçÎI¨è{k“ŽRÉÔþ)2Óvu¬r)0¡&û ™QµBßóN§É¼èVœ&…@es÷ä³c§&¿ßJü=ðåKWÙÙ~a‹À#û4Ik©ßƒ½í+ƒ /¼úÎ~]zóÝ7ÝCLT–m O ˜ih>ϼrÞï@û ×Z¦˜¿t(‡—ÐâA¢r8=å¨Pd°’†ØëIížI¯þ¡–iw“]ªñRK¯S>ûÑÆzÙ.Á þ-V×!Ï^ÕA7E›RJW#3/?„Ò};ûÜŽ_Ðïó£ó£ûµAÄMEWÆ{g6añ!‚êŸÓ{&´™»½}#mb¾‡´1’'ªú+ÚtpšÕs„³{¯ysQQ–ÏÔÔxœ?'ß®áùù’E¨.'òòÛ3³¶ ÆVÎ<ÊÝøë$z6ŸÆ€©ªÔ/Í êZÌ»ÄVö™:TåàÄLuÄ9Q‘»ŽvCþ>m›ßÛõ‹?'ûU(&f™½JßÛÉ¥š]3…ÀmÐVé§_òuYz=ÓhuqS!%}"Ëogwc»;n4pZ…îl¬wØpܾÐÅï= ·FÑL“Ü’Ž5Á—§ E™Ð¥û–˵@Í¢*1É}~vŽ¿ÙdçÚT3W±ù8QCÐ'=ü2‚Iî?V‹P\«¸mJû2½ú;ÁM¥}¬Fê¦T2µ­:Ϙ†•ðé6$Þ*›&¶˜°}¥þ¸É.°™DÛ°õÐÐOËèßeñ²ÕJWÌmû\\7[%ø)!®²“ìºá: †ü•AÕL›o÷°° õøÝÒ]”°g0~2ɤˆk{ÌV}¿û<–*[Ä=1ïrcjPÝõñŠû“lÁ޾ª¥R½«óGê\yÁ¡é«[YL‡ß#;'ÞdT$Ãb™7£®€hšöï/ï¶?¹·=P™››Ç f ÍÂr“çYê_ëôsºë:³®xŸ»Œ2E,5¼t×ðL?8-p£Üã–ø›8EïÊ5–ÎùëB¾9,‰É£,þ©!QV›¶š÷ü†v¬ˆ l³÷úl¤™ùŠm‡>£fP´ ÊÇ~å~‘‘ë¡ïyºGo1ÛL“[š’vJÖ+^/íøÂk¸®ò<š æ©QgL"+rJ$Êê#¹/¸³š„a­4÷+©e²„ÌÔi±£àþL?ãqâø„yÖë'u:Ó»¹7f˜WÛ2ß~Å;':£ŸÂïJ‡z~«·êß—eûŽú:F´ak^ຽGÊÉfì®:›ß9§uöfUpW…‹í£¸,ÞuŠ£÷aÉéIEèê4V{ÚWqÐ÷ƒÍ­ €±Eêo9¼ËTÉÑß&#²Wùæ.Âxk/ùJO ×P¹òf=)2pJŽØú`¡×ŸPªD›J3µ§êd°>ø-¥S<ÉA±,·Hg\f|'µ¿ööQ[»­f (ò?ütky¤ª|šW‚6hÑXÎfë^ Èj˜ŠÒ’Ç®`5Sã®ÁQ9Ëå÷–Ky4ÄÆSL®©áz„™©&sÇc®M½¤W—ûhx›ŒÏt-1¹$$ŸV±§è¬[qq±ä-Žs)4Ìf•Wˆ—vC-µjG¯Akæ-:–Â_Ë~2ìüÁWIlv½"øîú×Z¬Ûdš+}¯Qu˜hÖýïG¿¹# sVlJkØ z¥Èéª> stream xÚuSy<”]ÿk‘}7ÈnY2c_’}_²Å˜¹1Œ™1 †ì$”5YŠ,’5"YSI¡”5KIÖI–ïTïóô{zÞßçþã>纾çú.ç:’b6ö}Î0ÆaIeE(l…ô&íX ˆàKSA5³¤¤š„þES C€ ¡qX#‰Ê;ø‘Á–ø¬ …C5àjÊÔ5Tå¯@¶! qa`€0h,•2Â!É–dOÆã1heqd ÂÁ>ÔÊþlˆÃSh_?XÆÑÎYV^^á7¢ ƒÁÀÞ”¿°@DûbÁRÔE0€Áád¢Jœ°Z4êG¬â MúÑ.XÆDÂÕ”ð>€Š)}±II–Zè ,ÊøC€ÈücfFh€¤6EQúsnX\6ü_°‹úÙŠŒWrÄ¢ƒÈ€©Ñƒ©óoÌ Õ Ç 0è10B‘~J?R:PðÀORùŒÀ¢"Âñ8<Ø!h€úc'"‚0‰@"Âÿ/ñϳ²2…F’ÀÞ€/õ~«SaÀç×ÞA" CÁnPE(T ýñý½ò ^( ‡ÅP~‡[!°’Ó)G''Wù?{ÿ;ÊÀG•„(WCŽi¨QBU„©©ü©hƒ@ÿ·"èïæXö«pêÄþ*> ©.Ëü4¬,øŸJV8 €e~›Äª¥úƒúSþŸæùÿ?-ôgc2ó³™_ƒ©Áà½c„…#ÑÊÿ8ðg 3ðËçÿŽ) A#õ±¾˜¿Ç„&£C” š„ôûeŒ_¸#õóÅ68"úÇ›C”Õ”ÿàüÐÈ,@$RÝ÷“°¨?RžÀ"q(4ÖlO¢úA@ý ü ‘d:žŸD=û×ÞM-B$óø©ï_ߺ]«/™PéVwÜÜ'‹ª2_À˜U¤½oÅP!¨ZüE#»ÀÈæ©ŸNµ%ݳé‚'. €´)2pp&pК$ ¬(ÞÖ²‚³®1Ê<ÿíÈ8Ï—suÉòÈdU¬rÓERǰŸÃþ,Ž;JxÛua1È$(RYZÅd½8" ãùûÑÚi  õ¶AýcsXÌ:î îH›¹²ÜYÙâ¬jãðy`pH-jèìIfRýš· KÅqx{DZ¯~mæzí:®'I/|VêcÙ{Ó+7Ä âËÊžb=ÌÇ÷,FÍ"PsÉ(˜?\ò mP¦—Uc ¢õzï]"ž<VQX$ÁG¶`8ùæíÄvsß±§£mc8ŸÏ¾çã{¸Z›ìä;òN½ðx:lx¿Ý|f¶¦Î]„ÆV( W“¬»³|ÆÔÞ³«4OýdZ‹ª?LÿšÖjƒ':ª½:½ “Qt¹Pxá™ýêéõÓRl*7„ Ì~«R‡á,®µNËµÂŽ4ܲ@'½ê4€ˆZ¦ˆPîb¼û ÉÊ ö;«mÒ1õ› ÷™±›nBGÉÝåR?¸nj¹õîØ•ÇK¡äŇû…¦ ´Eö[¡ vlùigTÒ…ktE&'—†ß¦lï&ÙOŸkŒr(žòG?GÇZ"mEs­&‹Oua¯Zç~”:¦Òù¢dÚ¹,qÑ‚Úä’Rztëò¹Í¿sÔªx™m„•{çj[õYÑ9I×e~ÝN¾½¨“ˆW˜b}`ƒÕ+“óÝd¬ïbö»©ŽÑ•Úä³xêÙÀö4õìRBWÆ]^¯h_íÃÉ£ï9+U>œÊ@q=Ã^“¨/à_”ÔPþüû™ÎZVæôŸ3&½MÒÙX8Ö¯Oî4pø¯±ãTh¿Î;¥ܔ÷´YWƒ•Á53D±…ªVÀ}ûnÝ4%¬!$ ö1Óßvs·I{!E±0±1g!~qÏj²V­•BóÒß„?ôî®Øþ½ò¾ÏÒ¸ªÞTP¶Á(Ð ãY=­!4^ßûóçÍrÖÁw²·¶äª¦5ãWßÎr¤u:;Á“4¶ißO¶¯µö=w+kw‰‹w©c9ÝÐÇ%á™úêÙ)‡°÷UãÖzBÙŸl+2ãÎ/ªQÒ”áHõ©H=r¶œYÙP<òÕÏR:ƳFSýz  <ë¥mÐÓEøVÃä—õKÌÛÌ|åßwGhRY(½9w[V½_Y3<û,²LSÀë³Nvk¡Çÿþ¢¤Lb¤/F¦N¥u[|v‹Þ>Þ]¥CìHoÿÈãYæ!|æIýÙš `@`¾Ã~2-Pó­‰ÿTÁNK¦áMåÑI­*1[¯³eo—2‡ò3!4Ò* ËAgž‚ Ÿ¯ÕNÜT•J¾Xùt¯šá˜ò‡×ÃÞMJܹ)|_x‘ö6BŠsÔUðV™]Ûý¾“yóA_¶™±Aá¦]ßÒÝ mÌI«¥¢Ð%RMÁÅ´ª+>Œ>×Ì>U4÷=.ñzàÖY3"ÿ"2Ë«ñÚ Ð픎èA?XTÞQÆÙÅÖ¬ &Œ•Ù}Û–Á:ÆY(ÒŠ­æ*«ÚwÞèh:ÚJ¶­["R¼y”ò‡6 rŽn)·ô—4ô¤""²2 ¡ˆ:é«:óÚ]æÀôA#õ“ôS§ T²ì¿<éˆ2uHO/¶8 Û¿í½mrê¿àyæXÝ}Ö—±ïSWdcUTeE™6¤ÚZûÍHÚóšaqÙ›’-êãœÖ»I ™[GJR²oÉ¡1ZÙß)Táó0Ú~š_êÞ¢(r…sÒô¢»—f'Lþ K¶^[Ù;~ýÒoµJŒ Ã ½I-:œwOu¾v­Éør(? Ò_C:ßH¶>+ÝÅVÍÝÒÌè d‡œ‡ö0¬ëçSzð÷üŠž†Ü%óôe.1Ñ=.W'ô¾Ü©‘Z(XC ²ªÌ­›s‹ 8(᳋ҷ2 Üàr›î¿eaíi yäæÇ¾Í™4Ðxôí»·…NN¡dî[™5­uÜóqDMï­Ù,ƒígS¢fcïI¨UúGbIÆ4·2÷Ó”½¼¯&oîÇÙÅC×EOGEæIÎ ªF;^jpÆkn¼Ë;+ÑcØdü|Ù#(ˆ×¥«½tÚ°Aêá ¹Ö…Æm=C$`.u*6}-s¿ïÕ‘ðG½–­ßYiûÏiõ‘„íRö¾vF@ʦŸp*Ü<µŒ2½²’Û ™O[«î¸8vÈT~N«ò.rÏ%ÎSl’£E,1¡z7OÕëõê'Ï{>=u©ÑC1ô”†ÐI©ˆ]¢ëöftu äTøøôS¦%Ü¢ÿs ½Æ‹ùÄ qˆRz®$}Å]µ~òåÝíÒ¸“Sœ4| ôoØÄëAØ#‘ÕUêM^º„fW]còL’–•i„HúBÑ'&ýi6¹ûãÌ"nÇÌ ñÃI·K‡ÆÍt? £Á]& >î O¥Ë9 ™¾’(ûEi^Îú´\ÌîX„hWñÑæ[@åÝ“áE,Gš+©xv'Ë®H—µÌDà8¸¥Õ*Âæ÷q& Dû„ ãÅÞ~•\· ½6v‹[¾cËbÈå5YPRì1a`ð Ì;˜þè^gWñ ›Ýq¡ž%1<¹°³àÑ`ß½˜Û’÷žŽˆ‘fd©Z(\v´±3ƒ°uó„è®!͙͵kâ Y“ë®xÏã§RL½QìWl`<%ö˜è+sIÕŠ6ÒëÕÌ—'Œå‹;l*DÇ3_3¦ÅGM-S,ÇX´{qæY$¯Îó_¨l²cÉ´ú*~£bt±MéæM¼V`~±¡#Ш)yy¦úÖÜä¶6ü®® “m€+A¹[#j.ðÇeöç3I|5à¼abÕé>S/b7auÔÞ Ô–Ÿ¨ö8ËÄ{'8ÜlÝ4¢`áâÿ8(R"/Kö……Ùª1n×0ÉVìç•ÈÝ@VTê$LeËÍ™ïyÙ©1$º´ï={ô-2®°âA»]°§ÓàæÎXŸþð,nÚÛ2@êpÏ^P¢¹‚í«bŠD´übäø«©ååw Ÿ»¯¿|Þ’ú*wÅ(äàM0Ã'•Ÿhƒù—¸Ä^ñ%Îó>7U ‘¬c+Îo„ªžpFš8}å"¥ß‡NT°*~)ÛdˆiÊ[¸|*œž¿½\}éËøÊèÊà–Ì£•¡ñ=Ìr§}ä+ûêõüU |_™œyÏíž’©nd·°\Û±WÑÂí¹ù“=Ü…`ûÒÕ€ÞUmúo£ºúƒ§_%âí8Äs“G$°G²vØãŒž ¤Ï¦åøŒ ›f E—j½^˜'ßù†óS %”s.H«Dg–¹Ó¼çd‰@‹ øN¦X$œìèmíÖIcL¤wÛÃèGyýAS1ò9Y1ËêSØÕvž;Ÿ)“ŒƒbÅöï«*pøÌ˜ôÕc -°ü¤îœðžNLs&û¥Ìæø‹A~ïâA¦{F§ F§×¬Ôwº¸3ZÝÒhO6íg,æ¼ö&&C™}äàš"Ý5豈ýA‹ÔÈçÈ¡!s¡í>iªA<ÜÇÍØ„Í–ôŠü çg_ó¤×/Ÿ.~]׬óøí…àaDÈý1Y»w"¬°‘¤{/U\UÁÙÞժ˵G­´pzdžŸ/+RgJâõžJ$óØè¡Cg2tU]æ`àïu¦¥°jÞTyƒ¯jcò`ªq|,£A'O¸)’æÎô˜&^¹0Ñß_o’ü°¨Ú…õókeFÔ·â1J©vÞ‘Ïtþb§ÇÚ寺Z¹ {ßu'rq4+Œ}ôC‘ÌÄBd‹µíÒyäzÙ‹+¢i¶[º3“ׂ…TJŒß¢Î„¨@DE6hÖ/OêÝöX«ZÖŒB]rŸÌí­ØH^˜„Ôë]éh·ƒÉÞ&ô®çvV'2]Â^]ga°mõ„ËOÛ-Ë…¢Ø¿üg¡²¢çyjhÌ•Kw¯w¸]]y+|›Ø]¥¨ùáÞ~…Á#‡(÷Ûöˆ„ÑL…y2S‹דw£3½ËÑ> stream xÚmSy<”kND¶‰ y+dfhì²/eßNY3Ë; c†Ye_GB–²†ŠD¶J)YË–íØâØR Çš%ë7êœÓwúú½¼Ïs]÷}?÷u?×#zÒÜ ª…!¢@}"…ËÀTSœŠJ¶BŒ¡–  õ<‰èÉ&*j£àÁ_†ÐIˆ¤àˆ]$…cíJL$@Àa*0%•³0ú&ÿw ‘¤˜“pD?À¤€$<Ž@§t‰hªH XQ==ñ8c ’‰T$«Xz‡¿>Ð!zú’p.®@ÜÆò¢„””ô®¬¬  |ÿf]Œs!bô…7ˆ'zîF/a@½qÌ^¬9©‡ÁQödâ®ЧЬ¬' Ò12V†Rd%èÍê0:D½d¶½ùéâH š.ÌWöW3t'}þ¿¤°8æ›< ÕSÖ†€ó¢‚çuÿJ Cl?0 `r0e˜zà´«ìÞÑÖ¾žà7¾# ˜kþžDO‹Ä“Ák8,Hÿ±ù“‘Þ @!QÁkþÿKü{LJš @ú•ü¨N‡Aì÷½ ’BÂ]ìa20€í}ÿ¬é—‹!ð¾?ÂM‘ «mnbj{QêWúÿ‰ÔÖ&ÒËBáŠJTNé,‡Óu*#ä®jŽÄýÕìGòy–(ož>µ¿xƒ$2Ý•€ø7Kÿ®dJ¤àÐ þÃ00ŒîúþK#ý‹ÿ¥~>CŸŠÇ›øwñ]=0öôãéOdo8ôÿe!=pxß_äýxüný¿ÊýL¯®EpÁƒ.÷Ä‘õqW@Œ9Ž‚výî’ï¸ óí)‚æD2nï1ÓSðŸ8kWÚ’Ét+~£@æ§Cõh"Gp¬(t3"I˜€=M%‘èsúvSôÜ¿÷X½E¼¢Ùû‰hÕ0·ò°ªõR-ˆt¢C¾AÁfu—*|–-ÏðQf½)¿{älΊRr¦®ù[×sÅöŒ&Œ ñ½XEweíW2,Ü<áÜû £fe«™ªp,ïZ„5$\ç¿ugZÇ·Ñpþd᪭è9vn«"o ÐºÝä”—3äDáÝG¬fSýÊÇ6BæÌ ñ*̽-Õº0·È[ìj*~ÿzæ‚{ÅìÏ£WÜÎ}ý¯µ9½l”òĶ@Q¥º½FnÃõ•‘f5C­ô}Zö™ÉeÙ6ö÷-’½Ìü‰ B#‡øù;ƒÆªƒèƒ´¾Üׯ~oáP€jœgP%>§h£~YÙ§ù©Æ,ï? ­?o“{ûîÕ»ìâx=¬éh™=¦wÐŽ¨a|<ËtJ/G{³»ÄLø©Œ‚écô‡^™ÅrÔý²¸—ÀP^ö™ÐÍ5Í Ø¾â"sˆ<¥q3¢–tÀÝ=ú§µ{Ç ›´}zÿuÌp‰cओ_¥…S6"5C¨*ÑÊZ…C欷üo(p]ya7TWméîd‘õ\m±U|ú,û Ðþ´Ò WÞ˜ª’(»^qjý´CJõ”Ȱ²a)LH9:•$vc’AšÀú{¬;¤‚“u™sñÁò˜aga‘Ü®iIÌÒµçªHéi¾&‹§Ö"=àX Üd§D7Ì—3Y-xpÎj7« ,î÷ç|î£÷I½ŸˆšEµ™1=rß½¼¯1ÃÐ2w*‘Èt‰âCŠªmœ‹®k‹6:ÛU)õæ=ök#å­ú‘+ùÛÃÖY‘õÍGÛ…ë¦Äî”’³`;lazAWsüî¸Î„ßò[åOç{,.SÜË{XÝìï¤ wY%Ó“á\eÖxÜJÑö™ôÍI®ÃuþL]y……mŹg&]¥I,dAæ$urYêÀKŽBPEd.SæË…ìÉgAAB‹©#|ø“ùr}½m™ü¬8-$uöJe̚Ŀ;Nâ‰ûìëÉ £Yu¨°ç%·j…´eÞš¤|y!wùAt.õÔ>É®ü3¯·oÃÑ k4=ˆíÇûoÄK·ç\;üLâìÍõs4K¬Ó¬Éê]'n"}µŸ¼ÍæbÖ]F54§™d zD_¨—W0,ä°ðÕeHÓXøØ;øµ*)œdáT* ×®vÄ´}¥b£Fe1èx+hTØ>"ªúûÆÕÉ hö¤ råê3×yEÐ Ñ[ñ^|fU[¸5ÃMRß [bðEÎ:\n]=úR¬’&¿,bö‰ÀaÂȧ¹™ZqlèS;óLyoÀ¡@Ãw‡îpÌåÕ,-™YÙtAŽfÇ·13_Q°¯|>2á»R$Œ(æ°¼ÛyÚŤª•ùe+ƒèÆÇèœÒòz·61ooºkîTüÜ…3=Q–éµk‘•—¾šiéÕßJº½^4}ìiàÊðÓÜrÚ$,5IÝ ¾†nušv[ cÞ´ß»æÀ{Ë(`Ì#pH¤o9~õ]ÓþH˜þ¢i8'¬j[Êí|n‚X{!÷o33œéŽ…‚×Röß{gmëÎŒV³em³ñÃm¹‡^h˜Àjœ{Àð«ÃÛ=þVÝzêC #õ‹±.5*i’«WxïÙúxLÔ¹=Lþp߯6Ë´…;&ª«‰Pª9>î'×±ÍÞWÜictË:ºé: Gz#ñмkd?mæÓw—¬»;9ڢЧ7ÝÈ}ýòFe¼Nh­óð´¢k o°‰{¤î ±þWßß´æ5œ,×2ÚLHÎFôEó>´’¤”¯¦5(ËÄÖb¾õs¹gƒùµ¿p–¨o,:êCä 4ÿ§™+u;+ýrV!DžŽ&šév>öÂQ°Ž/*ªiÁ™-W]ßT¼mh{ÑÛ¯‹¨¦,iŠý)Äšq¬~èpëè¢*—È—N÷À]Žöô.‹¯6qƒ}Ï hiljeb¶ rÏÙYâa,I˜Ö¢1ΙŠò’÷^DµAuÆo ²vC+`5ÐM…دvV‰ÏOú,ðYËÏŽã†ù.e/HGÞ¿f¿ÒTq~b©YM`½áË‘)Ù?·¹)îõ·PwžØËóÁ*’‰Gãwš—„)ÅoÙzMr.sMyˆNŒ2ªåËÔÃN²¦‡$Ôä¶¶A˜LKµ*ñƒÝVš[yÖ£­¶¤ì"÷Icí…²› 6¶g.g›â%vï•b'BÕŸ=žŸ¶V[Ù˜è"nIuY|Ä»^šŠY/ÉÛwa©Y׺ õÜ÷K~^‡·£åNó[ñc÷÷'Ô¶œf–ä&ð=(§OHDìÍTä' Ó%'çúCŒ°äÌ´å‘ÔîàL ¾Ø›6+b’ܳ–„óggÕÝC NOû–¢ÜܪTáãC›üíØNÑ®+OBŠ2:/‘´áÜøÒ2×O[FæQ¤³ýS¢¯‘ý½I§+† Ž)›öŽfæ‹!‚Íw8b“ïÆtÂF†®0‹;©Ù@êÌtÏx,Ýݘ­(m ÞZTml†f\î1½ Õ=?Êz?•û‘–pôÉûÖø—¡+‘m<÷¼PìoŸ.•gœ»|/™06ÖWÏî^ó§fÁÂ‹Ž„¬Îy®…PçEXM|þÎ͘ãTŽäØ«.ÁÄ@3¸×VùäÔŽ™Ã¾—¥‚ª¨5Óƒl7{H ÿY€õTûJ‡ßSÅ¿O•”÷ wªi\/_š¹yq®Zå@Ñ|ÛÎ%'`_ÆÆ~ƒJíüæ'ݧÊGxú´VÍx&“u‰æIä‰z¿Ô™Ôýy…b´)%ªÄg?çcŸ–8VÊÐRƒÕHÔÃ5ÿ¦f&wD.O—ÇŸŠ ñþ›|§ eÿ°=CÛX®HKŒê.³˜m]šˆºÄ›VWä¿°¾³ÚäâÜÆ<›þÚƒŒ3¸a£ßK  Dd˜SC\#p(ŸšsóiœMƒ/=_G”…ö¬dYÉ”l³3¨h¢wŠÇÜcš‘²â[úöbœKš_[’8û¡Ü$½Çf‚Ž¹Ñ¸âîžçºÖ_­!›/6—]õIOy5<1JFÀ°96 ¤±$·ÚÌD¬¿X¾Ù¡I }Òvö¼('ñ^bž´´ßЋu|DjòÚÎh÷éµ'ÍðbM­™_F±Ó<Øníë üE–¼úR%ÌGÄNtí»7‡„ùT]÷5å—¥‰áFa¥öˆ"ÇH©a‘âäNË„€d‹ôÃ3¶þ+™¸éŽæœh¿;ʾ/c=NÞÅ^w 1_¹ÓfpßA{Òñ§»£ oùU¯Ò"˜¼[ÙàÌŒfu_ߺý@×Ó¦f7kiéàòùÍpæ”·ˆåô…—´Êê|M2œÁXe©é„¡¨*”V~ùyóçÊB‰N$üQ‚: ‡tÏ%c² m3ú¥$:Ò†`ü­§#ó|öÇnUqÙò_^ô£æOa¯‹Üã¿.ÉÁôXÈhÛ7zŸ ÖY˜±ÆXzxÎÇñ˜TkÀ!v_à=«Á—ÓµbAè@_å].Eé¬< ×·ñ¦LBúP)ýœk3ñFÂSR5Ç5|nÕÁØ© h+Y7)fÜo•ÉjÛ’~UDÍ€v’ñ±Z™+CÑV˜êd´ IâJ@{%ëv.Û{–$ñÌè/} Gƒ«”¤½Ï—.BLn(Œr…Õ98ÜJk¡Æƒ« ‘‡ ²ãä;½Ãrfsܸˆ4yIœº°¿¤Av"©6³õèÒ›qA®v¡È-ïRµ>C × béíê4S©™Âÿ9s endstream endobj 436 0 obj << /Length1 1601 /Length2 997 /Length3 0 /Length 1792 /Filter /FlateDecode >> stream xÚ­TiTW‡icˆƒŽ ú„ tÓ6( H`@dwq+ª^wTWUªªµ[d1$Äm"Çà‚" Á£"ĸ¦ÁuTFÙ4£ˆFH8ÙD‰óºÑ0óÃ9ã®ÓwyßýîýÞ}ÎÓ¢ãÄ“CZË$R?'`4qDœN¤Rä“Î9;Ïã & Œ ÐÄ«4 €— Èär¹ÈÌcXG*UX»Ä1 a ÆAßøQ¢/HÔã(ÿõ²â ‚ IA0/*úoa‘¡À54r!…4ä0 Dk)$iºÃjØ8C¤‘4/AX<ÀÏBœDÇ ‡¬1äXÈ©IžGÿÉ%‡Ñ$€À’Æ) a$€ü 4 Âr ÊP£‹fxÇ9’ª2ÌSPa‚±6O¢0`(“`pÒ‚)†`PTÀHšÔ ÆZ‰$ÏR˜ÕF`,Gšhhx’VŽ0ðT"q(Èóa§3Ò'øM÷ËR:ÓiÆ”õ+Rà!¥ˆd^¨&1*IZäi¼a´‚2鰟а¯b«!gëË á†x`CS:@@…È3’PUàúªJÞœ¨o@Ò7"è‘óÿs´ #£wýŸ6s4Nˆ†¢"15’öÕ»ÐÃÈP<ˆø\LMRº×Í^ ‡éÅB¥†Â¸Ñá0C½ÒJ4©D:ì$ùR ‰hRÀU@Qh0&ÿBš€EÒ hš{yÉGÅâU$žL'ííc AšÝÒÄÄß3viLØÒx÷ß=†¦”h¤³¯c«—},`ˆ_ #@P£)bÙl)b!Ÿ‰ÖI.E™4õ¿T3!ÉFì˜À‘Z€Z–ÊL¿üXËGÁ|Dã a¼^³|Æq˜N„ê!kH‘¡{M@­q7TÀSB3:XjÜ)‘qÃ}eÀ3S«1£[ô;h\Ãq莙4¬W¶i' ÔB\ôC#ƒûš´kO®ptâ¾êkÁ ç*eÕŸ±Ååñ 33úô]îËKW=?ò™¤¢Æï—“º†GìPKøŒÖË•ö”‹~ì,x/ÕÉ­ªðí¦é§}Ý[?ñ\Ql“Û¾xKJW}D³åRé¢Ö×bbW|>Ö¡æôLκ«ß-ÃiuaÆ„÷ûXÛ4|ç±­>3¾ÂÌîhÑ£öé_úû\.\¹T}QßmUÕò®{þÖ?:ûcÓ¶?š–#èVq=ß Þ[î‘æñvnø˜%O7[‹T‡ß ÿè˚Ʋî{ÜWyCéëÇ‚×ø$C‰A®ýøBÌe³<¹˜9Ç,£,›œú©.îfãØÁ·"Þi‹ÒYÐŽÓ>xü°²ÊŠõš»Ù:/a[mòû“²âÄl¯[ª—MÝ8±u î~½®íŸv+wÓºs[Þcؾ­aúõš ÏYzþ]Ó·3à\£,0uíìõª³uq÷NN>U™^H«¿Íg.oI-þ½?^MNÓ7?ü°ÆªÎM\ø]ÉZËÀ÷òÆåpÄÁE>N™ÙÉÚŸ›j¿3¸¤O±™£7øfϽãR­®krwŸÓª^Ýpý~¦™÷ÃÙå!§Hg4ÇÏNµo\üý»‚’ºÄ æËbì-ë±[ í*ןY¥gë»lj{̽ÒÅAƒ'.¸œ«£¿YÙ7Ô7”›àx8L'ñ¬ö()¾nä$]y:âšO‘cÁ­ÿÆ)¡ì|ÐÆÇ3OEÝô?ßyód‹ÍÉGþ |i5󅾸îóîÙD[{Þ”ea1ÙRg{ûÛ=‡»ŽÜï_ê0ÕÊ¿¼åhÁñ,ëŽñÖåÇê¯è:YÊ‹*×LÞg¡œà³"r«]•j†(éqü„Ÿ0³#9ŽDòO`÷üA…GE[uwÑ ?7ßECv‰¿—ïƒIWq!¦ ŒÔ§ï/ í¿”“ÓP«tHl˜6°ÑpLÑ•?6JÇ­6»»®xϪ¾ öØ7Ù»}êç©¥yÁΉíø¦ëíÅ”ânkOgí„æT î³)tÎ_Âle;æ/ßrhóÆåÛØ /þ@fÍÿbü¦UV¥Ýÿk×q endstream endobj 438 0 obj << /Length1 1626 /Length2 14184 /Length3 0 /Length 15030 /Filter /FlateDecode >> stream xÚ­·eTÜßÒ&Š»»Ó¸»»w·  4înÁ îîîÜÝ%÷@ðàn—ÿ93óÎ:wî—¹ï‡^ë·KŸª§v­ÞTd*êLbæ¦À/ö®Ll̬ü%©›‹šƒ’Ÿ“"Ðø”s!PQI8M\Aö’&®@~€6Ð 4°³Øøøø¨Ž^Î K+W­¦š6ãIþ1˜zýOͧ§ ÈÒ@ýùá´up´Ú»~†ø¿vT®V@€ÈPVÑ•U’ÐJ+i¤ö@g[€Š›©-È  2Ú»éÎÛföæ JsaþŒ%æ0¸8Í@Ÿn@O3 ã?*F€#ÐÙäâòù ¹,Mì]?{àêÙ›Ùº™ÿàSnáð/@ŽÎŸvŸºÏ`*.®.fÎ GWÀgVÉ/ÿÆéjeâúOnЧà`ñiiî`æöOIÿÒ}†ùÔºš€ì]®@O×r™æ G[¯ÏÜŸÁAÿ‚áæ²·ü/Œg ¥‰³¹-ÐÅå3Ìgìºó_uþ·êMm½þåíð/«ÿ…äê´µ`F`cÿÌiæú™ÛdÀòϬÈÚ[8ØXÿ-7wsüŸ:w ó¿DûÏÌÐ}‚01w°·õ˜-X”\?ShÿïXfþï#ù¿âÿ‚ÿ[èýÿGîrô¿]âÿ¿÷ù?Cq³µU2±û€ïÀç’1±|î€àŸEãf÷ÿr1±Ùzý9ý§µ6ðßhÅlÍÿS'ëjòÙ1{ËOZX™Yÿ-¹|yÍU@®fV ÛÏ~ýK®iot¶Ù?yýWKLl¬¬ÿ¡Ó°™ÙØÿC׿U@{óÿ„ÿIÕ¿À³ÈÉÈJ**2ü–ë¿ U>‡ÀUÃËñÛÿ(EÑÁüþ #.îà ðabãæ0qp²}Þ½O@|ܬ~ÿ‡”ÿ Äö_gEWg'@ÿ³nV¶Uÿ?~ÿu2ü0RöfæÿŒº«‰½ùç¤ý/Á?j37gçO‚ÿuù?«þŸçÍ<è 4CX]r0±NÏÊp­ÇÍ™’Ôècƒ u,kÒ(. ¬uè HØá«2~­ enžáo÷úuâø¶/G0Ö‡cKÓ› ü[@äGA×_ˆ¾IÝÉÃpÄòµ 9ãT;ÚçbQaJ›Uë`wJUíké+ ñL'‡3ÜÅ] …{a å½#Š¿YZcvZ3F}ÑÉ)uÒÑÃ=ÍÐøèÈpïtÿ>!Cn<•€ ®Ê Y²«—±óm“Ù;ô³;#˜æ¸›£žÜªs‚yKG¦¢EÍ&}@Ë CóÚû;Å­ Ãhq»ûRIU·º£…i'¨Ö¡¡_Ä`Mñ™dÐÏšñ}1-®PáãîæxX¹Xê¡å8ªëÛh#-û0#Á˜H¡Êå=9ãǽ…عRf‹¿5˜ús)½ ›fD»oûÁùÅÃøÎ¡t3½W.¿¡šÂ¬•èT Â]‘ÆH5w.»áMÓ„§çò+äó­yÓ^n™Ž¦CæcÀˆÞ $$ÒëÄÖì˜ò㎕ܓ½nåñ3ÕέYÃ{!à΀֖°2¶Run-«™6?„?–ƒñ™'ŸÀ‰KæÎIß¿ J«ØƒŒîX_¤„ˆ+U'éù,×¹ú¼pI_ä[aæøZúq7qrÁwAÔE£iéùçiéÇ$‹ÌýØÒô®/ŠœÊ %Œ”üÃu ¯onBYÝDÃÊß] ˜涚•ሳ¿Ÿý±aîmó奺m®¶ tÃìþ×›©qÎL¤3?#…“À º &ê’áøzÿu3>ÝvîcÞPÆ«u¨>X ÞúçýsIæ*-Y#cƒ'Í”;˜çûþàufÞBX×ø—“N $øûÞ)áÕEû£—í{0Ãw½ØÛ„ßìøºm iÄÀÉ*Éâa‘Ƭã«(+úP£w‹Þ1Ç´ê »ÌÒÛ¦;Õ–«Í¿ìLêÔ/œf5¾„?CÈÖŒaL›Ð<<ø´ópç°;~àõ~ÅÙ.6÷K`2¾™4ÔJc…üH³r•›);p@¬îƒ] ¼ô„î‰:Ƹ /7]%RÙohé¬ó”žkVä§°´üÁ€ÍØoÕÔv ø‹’ë¸Ç>°)¨¨ìxn6Él†·8ùý/ÝÆE^­éQ7qÝí}e™›üû«?rvT…¸yGCt½â\§Ê‰~AÖxLþö}ؤמ¾—u'_N¶!µªS¾]3VàOÐUß=aAÒµŽuU'Ú7jðï sû- 9ùk(õÒÐ"º0?(kž£RôÇÝ­Ø’Dci¡mŠªÛž®V÷¸/ó #i’üåÌÐéuaŒ^Lé=[Ý4<ÇoâNÓ*øBzò#T~Kd8‰dåÔg€j‰÷-÷Í<‚öGy–¯u‚¹¯5ØÛ';ÖåÒpÔ¸j7:Ûk‹Š —Ñ|ØëMñø_NJ×° Å\k§Ÿ–úrÇ™n”§*3ÀŠ+왩‚o_Æ-ágM4é]=’ò( öG•=y•~fLIwRC¦V#{êº(òóx[?_ÄèÀŒˆ DhöšŸeª;U¦Lªö\Áî™ì#œg]˜¤Å!Jâ½¢å¸g€ásÊ8E‹c&t)!®Ÿí—½êl \"`?ú±ˆŸ1jõ3&žÕÏM\¸|Ö8•þ\ç€ R½u…‹wÊ4;M"ðÜËõV¯šååäVK¸³2GôT³Lº¿o¸â­'_®@’Š?þYàÈ—ü¨TvSä8Q²óíjAÜQ]µ·®Oš¼ÃHg켺ªŽo/ à†)ñ–sµ¡âäŠ#.Ƥñ‚lC_^Q3Äæ¼!>î…~¢mx•üV³$ùR…ëº2ßÖxZ« u±+59©$ß¿<@ù5ºÂûÈ;ÞÒi’¿´ƒ‡û;Ùooöï[ýÂä—|‚Á’#Þq¤öµ1ê×/¿ºÎ×5] E¥H[Bÿ¬ÇkÀáAݽ¥¯I¹pdâŠûL&&&¨4­[Ôãàщ>ÄßÕÝd>H™¸ÔíÐüâ‘rÕ•0øC,†ÌWé½Á»\aøñЉ,¡–L_¥‡¯·3š:ëŒØ^‘¾~Ž‹5³ÌQÕ ðDÄáaO¹ý õbvuÙksc{ÈŠ ÆxÉ$ú}lsǨm;%NâûQ„íò= \Q·ì¼â1vÆ€+Eff!s^Q~Ñ›°³~Æ™¡ëÚ†*"ªk‘||ÞŒ#a>¹+5ÿ&›Îg¨QëC2¸yxfY{>ÈNÕî÷<]7Þ]¸ðl¡¬ofêÓží²(ºúQ§'+èQ­«>¾Ç)‚'V¼¼wð uå­rŽxO€¯©ÃƒkjL”Ö1…TØT)TªŽi”}t¦Ý#¶®.1žê$Ž.ÈѧDøòT½Ô²i†Wƒ#ÇkZˆæ{„œ‡§,Mrg®.ÕÖ¥ò{rŽìhþ×ÊKÏiL`ÓвÁË¦Š Ÿ4À‚Çq½Nü'©àÑäPr°!8Xi®ûÈ@±¬{;­ ¬ŠÿYF“Ù]Áeù§!‘A½æœÛæ—GúeqÆHlÚáÜÔriÍntßX²(”9YŠgˆEh|ºÔ@~§ó]Ÿ3I¦ì0ÍW‹ã`ª‘õ~FS¾k9ÓÆô´:#Fô]ÀäüŸ®¥WÂoœ‰§zMwõ7Úz5ö¿ö™PO9¡J5¥(0©¿9¬ç‡I ]Õkqѩˀb=1T*ÅØ°7ÔŽ_´±ðgºÛsuoüì¦ô‡p2Óª„Ê?ƒ»:Ë­ ÛSøð ãêXü¯ý·ÎsiD[_Z7(z)Cs±·8ª•¹Òâ¦J<Åáj“AöPüRĉ ᬲ+Îå›ËÝÈ{Šv‡=2f•ôp§mB´ˆzTûÞ§+§ç‘¨%Œˆ‘o¾o÷‹‚ªkŠÂŽîØWÏÑo¥úcvŽJð‹>^U©D'4›²R%9EB=Ö:XÊÖAd¦Ê.8s›_çth3‘n­˜g÷Á÷·Ì{!×öÈ'5–”Ž”\´œèHÓì!¨cY¡("ʵ‡•_úÄ1G¾SëŸC §ï‰Izd\2Ø`‘»¦à NúÛ&:ÿå*»zeD! ¦Ñ,ËÙ ¡%8öû1±](ô2ù[ð:X´fÏGŽúÆÀÑÊÚ+ÍN˜ßÌ«|ic÷&®Ë~#<ê´}Pn'¥«AÃC’Iú1F´Vïyh­!4ßæ&yPï##€ÝOßдÂg2 û0?îǦT¶Ä'Ã%Ç’RÚ–GeðMÀâ¢èäÍq ÚnN¬m;È…m&yµn{£†œÙ¹Û (-‰&ÚÒÀƒ53)¬³pÝÒøœ µ”0ãWºÏ΋y QÍ0®šì=2ñ÷dœ¼íO¡Ý%\jä~ÞbxÚA^íoÀ7­SkƒW„b–s&0²­$½´´SÔ€¬­‘CgÂs{÷6„$OÅdž’¼RÉÌ ›§ß 2´Þø=#RîÖÎá‰¹ÕØ36Ø­ÒhÉð(X.ÿ½9b7‘;íoƒÏy¦-g•ízõ‰üàš~p¸,!vL½¤(v¦æJ,Œ¶ž¥§Có>f†õmcgö¾ ·mÿTª³nH—OhÃ[ Säböã¾6H“gb>W*MØ2,Öjú /¥ÚŽ”ì€ Y¤#!D°È°€ L†q+}SÆU‘õ¬ð692ÄçdoÿwЃÁ“Å_ d‹ñP†ÅÂÙ^þ_”pè1©?ø¿ú\$Œ{¯‡-ƘšS·±±úQNÓbæKœ'Ÿ ¶F[:»8!:—µA»ÌS=yz̸K÷A¾§tðÍÉAk)»þÖÂͳ0è­`CͶ Þ;†ÔùØÕ±\ª÷óäI‡”O°Œ‚é ÅÚ›_Žóø‡ŠÉd¹„ %ÍûI锘Z檅"ÐÑCµ@ Z$œ{K«•›r”¼ˆÜäÙTØeS>ð b*lˆH]ë¹ §348ñ|!úà¸Pàn±Íðª8Üh'WL#@cܓʪÁ^Y‡–¸™š¦ŒþïôÔ9ηѽô¨'µ­¤UÅŽ eøYZhOÈ$•3„¢W¶×¨e‚iÛ`~Ã!Š\%ßÀoÈW` F£öUŽìé†ý9ñ ¥œ¯ø)ƒTÅÁvÞŸKª\4ì°p*µ§«×¬AÿìØƒ¹½¯½×œº…=ÌsÔZFuƘ´ î}f÷zÉë:6Áç„—Ì<Ý"±Z¾!@ /A çÙ‡ŠjÀBˆ&7rÊãc:¬Ë2#ˆ 36ˆ\’ÙŒ]ZñÝZ«°C¾(ÐðJû°­e“3-L¢õqK²2 šRx[²šîÄÆ-š'¹»bÖÖ¶†g˜è¡ý‡€ø¼`U™íû—¾Ø_9ñøŽ Oíç°I–M3&Æ]£2õXœ‚óèž©ˆÌ±Kp»Ép³VÖÙ (]ÑgåÛÔA°áà„ÛÇZj£…öŽŠ&ø¿»j‡•=ë†1°Wp_BÁáЫ݈³¾Ü]¨)›÷Þ-÷ÔÇr6 ¢†ŒÙkrLšBßM«Gä2©ëûÿ¦=¦}1‡ù¢àlä#Â_ÑF÷ÝÜÔû=¨ÉQèy«ï\ǰ¬â!ãyÒ »\¦ún·‹k¢Ý蜵9;ªƒ%Ð9¤Íccô{ƒÓ7½˜Ë‘D@y Y+r[îPûˆ¸S£¿-f°<9„n_stù6.+ø ÝŸ(înYúºÝqm^Á \¬_%æ(ö4)*¬A˜º>EWˆ87ÐWz­îGˆ4_¤«‰Új»Ì¿U(Øÿ:YЄCЉ"¤-®%T~àsIoÕ¿Ÿç"õ&Ñ»øyáVv#¬–È|…9qãaØt©oÈš—I›‡lDMÍàîbK·&;ÆFæ'zL,¼L,ÚW±¶×D,"Êui@¶­¦mM\‰vÁ¿}: :ùM‰ÅÅf§©nL'_Üu<ˆH“„üAÞLlëŠÁ;Ǽ?MD´ ÔÜñð€yË_ )=9­½û‚™!o&zàIãÞðÚb&òpÂ8“•¾Ë ¹ÚpRŒéÁOG âú²#´Ü øÚßôÞ,Ša¥7vê©=ÏíÀŠL˜˽ní'¸7´6U¬RïÞ: P¶Rª¹ aý9z y4Sóg1Q•š3gÇ Ϫg…¡…$ÏÈÓÀ–ЇºéŠÚ±±',)8ТÛ\´|[|á Ñ"›^†dÚ¨4tX|Âð›|?òšAŒÖJÕDf˜M¨‚gˆ¦‚™Ëù‰ö©®ý9‚ú`ÞI°ôÞFèöbfµG›4uyôÅ qÚvñ}†IrqoÈzJX¶Q-<í1KM§~Bd$7-0ô¥:é–/2ª-ñ#à>P\ÅÚ:Só¿´M³a‹ž~/Ñ M3sfÕ{¿ü™—ÞÁ®BSÛÛ¨Á!íë‘iw•¹¿Å˜½IoΪÞ–ØÆI`Á9u©…‰Ý^™b†ò O PYûž2‰‘=Ãn²izwo"ÔJù7’($dçá9™ Á±öç’z3೑۰o+ðôE$4rHY¦^Wáuÿ= š¡šc ÜÒUØåQíjeÔ'\ýîŒ ×ÖAÞf#„@™¬r; „;å$÷Ò”jÈÚ0ârÇÒH:x,#cór£¿Ájº)èn;~]€7¥»Œ‘±Ûÿ`»‰H·ùi)òüëÂ65ªÓw(5ã%ZGÓ>B2%lÝí•Äwc%\ÈŶ‘K@ÉÃ=v´CÖ ÙЬšb,¯6£56ˆý¡I0Þts¾Ð¢¡/*¾ô(1áQ¦aÞlafxÞPú T¡ ^O"ª ar<@'>¾÷8T“-TríZ@Ó{jÜâ€ÇãÏnòö‡\;’àG¶A Q‹œŠ·ÍUìù.“a‚õ? RR­†l,Ä<ïºFǤ’3mB[Ñ¿‡XF…àáô%ŠÇIŽ•¶솈Œ¨,%¾A‘§yŒæ,1“î•vN_| ÖdáJÑ)VÈ)ªGiùvhš‘ª ~ÑÐ9ÆÎ®”0d©+hS6ïÙ ©yl;Yµ‰@ã:¾¾xPëjÀ6þ“¤ÝµKÊæï†5z ¼yѧ• íÇjÝ-ó¥Ç€¨`âçkv2ûr¶8ä>m@“¿~蜯û/‚(?¶–1rWÛäòˆ£L{ÌØÁ.Û‰ó¦òɹÞÛ³ ý‹[Sš¤†ò¢Ä܃HXwýêI'-”:_‡2² :C¹²2œ³vËbl‘äLvMn¨Éž}K* bØ©RŒêñ²$ÿÜ_¥·ˆ‹íI¾gC¿ ùẳ°6´kï}×W½.;¯÷ᢎŠ|Ú¯wûfxÒõw}øË Y§ ’0‰KÍg mli(|¬õø*¯ÖÏšn«üP‘‰m§è¶¯’ΚÙ3J}V37Üæ*ŠuŠP1oa¾Œ-ˆ³lô4~JûÄf³¯2Œ×p9C?î.o¸Ï1(û“⤸6ä«O"?ŸS‘yÁpRG·›iï俽¨0j _ #œALý ê*ÂN½sñ.Cðõ};¿‘̺–1ÆúU®ÝéÀÁ«ÏЕ•¯ \èM:@Ðh?ºê~ö<ƒÁÅ>=$ð5¬Êi­ãIC{§è©á/m,cwàOa›l-Âf0ˆìylÅTrÔ¥6«"qISQ&;i®•GÔB% Ãÿ ”¾:?wD²JÅ]¯9¨-ý½1½Nmµù½éEo ‰…@¾·›&ÙHH=x!Ùlÿ>M*Té,DRÂÖÏÖ|8 †MyUÍ(Ü+-çŒ@A‘ñ€M¢S‰FB£B%Ïñ~€µð¬¢Nš6úëÄ:ð´å¿©Æê+YDØ.þ5 â4ö@EÇd.s/:GcšÿU6tÚ&üDŸ xžÓr¢»mñA. ×—5ü7ÐV`Ò"t3¾Ln) ütjÂf,›ÁReÍ/èh"&Ö ë }Ò§‘Ý×F„ræö­Ë@¦œSŠpq¸»X¾IÏÂÉO„‹æ.ÈÁðÆ«÷/·¾]ȇMb€ˆÿãu= @vV=M„]¾&&9à+Ò,ë߯hµF °î ‡Éò«t¨]">RÑíc° D˜k °R,ªYn¦cðï—FØ–²¯(È ŽÖdáë&<üMŠù‘-ÆŠ°í6¡ ú.±Gg-l"T É1oÇEÎó˜²HôjZ­Z÷—¤*¹g½T7©ù1¤LR˜Câ“+ïCbù)ÖxEà=”h~ 0j‚Ÿ»á§÷·sªG¾Àà<9õi€1/ÒÖnO#'e2¹¹.+S AFî«wHHª={¹Ë¬¾½\Ê~¹ë+b?@¨,lyÐLau®0ÄíYDeb ‰«à‰á/ЩëÄ”ú ‘Lf-Æ«â8ŸzŸòGT"øŽÍy`ŽWPmº \ÇÓîD·Ðz;;¸Çx_ @×Íè¦K·'õÇŠÍM_ˆ²×ùÐÅ@† sNþHËó媊›F͈YºzŒßƒXwx÷+s¹|³œÛÎÆ^OÚ×kCÏ8pǶö¦–cÇ Àï½þ°¬Ï“_•ÔR¼}Ä Í­1/[úö°g{:AWJ®÷ $Ç¿ÆQ;ZF{m´ÞŠ162Ik~'ËtîȵÈÙYSs IEHsÇú®Ò¸[U¯Õ Æ,u´E&Uë/‰ª†9Ow¹Öå…AÀlqp…ù˜±;’Ul^{}?Ó³à@-¦¿©ˆÔ â¼¦zëÈÇÑß}žy)}œM[7>³,‚ºoáA×çî‹B·×W†¹_ZE ½Ebd˜ù™AMÆŒš3Vd ]~K:°>®KÔ gÉ¿:µˆš,¯áŒrÙôBi/·gj¨ ;~µ2†éǘC—ˆ^ûCcúáô6ƒÃiÅj:W^ªAÇšê'Uÿ«­×mCÿgOef+AÕïÉÇ´&aàŽ‚ÇàN¹:…ë:•©M㤙öÿ»Êgƒ­ÎÅî0 éöaùù§PX–>Jꢰ¿¡³_ÅÙï©Ût‘“ñÍÃuD_0KPÅ9¾j¤ˆ«³ 1%ËSªÆ´éj‰Ä,öÀeï-åµVÁ®Yòì>z£¿ÉdÄö«ö+§å ¶±jZ¦ÔGi¸lª‘GIŠI“Çï50B2©ŒÊúοQ»Íí í{1€÷WgÂnð~{äm,ëTÎeBÊ4L•[ˆéÍÀLgRqœÙ!î‹{)OÈP¥É#ØNA9¢ % &'7—½2'DçŽú.n“65¡¼[–{`u£‚tYáz2- ›eX®©ÑHª¼sBíà™ Ð¥¬úÃS:x•SÁÄØ¹@îÓf…È´qÞ_oûKâϓĚêÉ¢xhì8KBü¾CŽÅZ›:4Êѳà÷9ÐCÙ5GÙŽÔîaé$ÕXÕe¨+<™ííUSM ÞüjgÅÚ¯´'8ÌFÄ!Ö7“ü½àN˜ûçifÞ¢”8\¿Ãž‡·–&¦Ö¬¡Ze[Jµx»øÓÇ·jC7¼-VöšÑî†Ëx›&ÿºçjèÒnο D|—O¥9â(v:2p|*òSaW!*‡zƒ;›˜³÷Ù.Ø"G1îeU6´o%£Gù š6Ï@£+ˆ«®:ÿQí|ˆÃ6†ÄNe¶zs÷œfðmÖwÃx¶ªf˜\k(ùx¾yŸ-çD¿\ú)€µã°°á‰í©t§=/¨sJA÷Ž5À>Èk|×$CÎðWx\0éL¶‚;;Ê  ÇSgõÀŒíá6kŒ“ܬûœ^ÎâR6·Ñ•õBð—E<õOÂå$±Æ*€â„áI\(ìÓÚÝË¡’g¥ ¾¹…2M/ÜÅkK–áJ^³ ¹mDÀñF®×±…#áÊ)“lLbfÒa›ô‘s½Uq+l””ÄîãúxˆXÔHüHnØJ¢ö•TÞdUÌuŒ †§´‹ü–™ô ª–ÈÐÆó[ÃЖ±IóW›ä}T!p¬¤°` öØNQµÐ g¨kÜIo•Ä0À¤ OŒš{’pÝJð‘PÀ YèDÏ ^¿{9F¸a¹62Q=8™ âàæ¯ª¾–¶è¢š]?–¢”B"©^\V%Ô*|­¾ò¨P;7x©Š’õï+ñ¤8Ôs”Ý&Iøàfâ yNð¢–Sj za£(Ö»a‘¸ˆt¦ ó&Ó¡|Î’ŸÒç\nz¸[4(µŽ!ýÕYòßoué.T/ÝSyª~Å«—ºû%†,Ã]k;usM‹Ì¦S¨~MiQö óZuÂGèå©Í<Þ•Ÿ¬Ä#ƒðó#M s‰ÉŽ«ÎÜŠz)Ceã N½úœ¡­ø´ÛmgP„/VWÃÁ…Ýu–Ù¢ÂÌTÐ^ÔkÎ0²0*ìÞºGòÍRÉ󉻑t’ˆí¸nåH§Í&ž²‡ïÆ—8þª ôÅmŸ mcÏ‘6Ú°ÞáR*'޼ ·$aíXß?Ä/–JœŸ½r±ä·ΉLRa±ü#óoe;°Xèþ,Rr'fÌcCi)šf3<ëaî'÷x÷%š‡6C@ã"·fÐ~CxYhS¦µ¹š”BeÉY0[c_£q!d ƒçñn_m —‘òÖ|µ@ÉK°F¨ýû/ÆBjÚbˆ<§z›áÃÏ#À¦.›BK‹¦Üˆ­qZ6•cÝ´VüÈIîW+:qè+t”Ò™è°Á ÇSºõA4ßiÌÓ” ¯Ú}ÛþGDò÷¾qíÐ-à%WµTkË"&ðŸ÷¿´d®g©Ýp¹‰zE¥dkõ &7ði-U0ƒ<>3üQaïÛê_"fO|IiÒxŽù}T¢ Юç0ƒQ³u³ñÅ®E5b囼öÄ•<çk±uwZKm>½À.Œì…yŸØá°™êùI ÔHš¹Äô“íÊô#üíjÜñQõù:§C¬[2zd)áÜ$ VLwêÝC(ó뽩_)zVi+%E¹3VXôzAKŸÆ,\'=v¬¡Ö5‡Ðëͪwúk…lÚSM„jðúÔÒ}+ø•ÃóržÊ™(‹ãí@3¤*2ùµð‚)c!”ojPpaÀÚ¾‚Y4³wÍ«”†ERn ˆË˜Ïö)¡Ñ› ‚#É¢•GpGGÊ7\‹mÝŒÒ|ØZ¤ ýù,¶î2ïK½/`œñ믊«Zÿ•`Ñð,æ^¨­©Ð€}+à‹/fŽ5É×çëJž\¾Þ+}. t\ ƒ¨WË 2­iö¿ß+ç·Ä¤ }åð|µíìltþËäoêk›AïÔMüv!°‹²ûІ×ßH¶=fþš©¼QKY¾¾Ò³@UâÀèu+(æ^ï diÃcÉpŒþ0=r²ª>e©j¢x§–ª¦Ól½’p¥FâLIÌÀ[T›4ƒäÔå[U³#^ØEê×=ß yB'ÒÒ°œÆ¤XùˆÀf>8¥Öþ ¾qŠ0þÙ×ϳ85Þ: ¼Ã2Ÿ]S†„ÞöËîŽ ÑæB µ~”bUè#ë{8U¾‹796^Þ¿í@Ã5K£ ù¨0ÑÍÉibÊö•*uG›Ï.R_íT¸›uò‚Äø†i쬷æ/CPþ9t<©]vÓF(ÌÏ©¨rtÿâãÀ[ëúó)ñfE%Ø“ òz‹*k§¦-²ëOŽ£pù—çá}!éyR|´ö’ùfÃÏúM{ü[S÷––,H'üÎJ+–vPÆ÷¯Œg*º,qçñfÄ8ý&\Úm­‹õDâ¨J˜³þýĆÆF½<Â*ó©§£õ Ç%5rÿ¶XšŒ@­‹ä¸C¼ˆ²úo6'ï%ªr²Î `%‹®BéåÇR{%ˆïÀŽcÁ_nï´Wž‹A>Ƭƒyn1> ‡¤åÕˆ•wè3m¬À.4ýïµ-wªùT}  °›«dfm‘!bP©Xl§eÑ1]a.Àñ5Æâ‚;Ïò_IAŒ©£n‘ç¿ÕÇ @*ÓE³t-QÕ9ŸR£ðÆk±§È¡-¬j‹Ø˜·ÃK— AX·àÍ÷ðåÀýz”)vVJáÄ…¹csâUàÔ!n5O{5ðŠl9izÌ<¯†%Ã~0øÛ°<>…Åu5­kµ¤bœLûžx˜"\¡•èßíHOÚ;¼ÏHD`”QnG]°ýTªÌ/Êóøukße¾pTšU"áÐ=Ä•\A8 Ì£ÇÑ@–d&y¬…¡ê>p87(¯l°µ=Û^ Õý¸¬×û8Éöå4%à›¯VÆh7ÊO|F}bº<ƒŽ\˜ÊïåGd?½™q6¾°wR0Ñ¥ûÁâàî)}AyJÓßä"CÇGõƒ©Hwã1pGˆ!jús]u€G*QæDn–/®2ЈeÆ<ç÷S=Î}ù l‹ùU¶¢Ç‘~hÈe’ ñi±×騂“Ê=TæKƒ¯ª« ö‚Úø•‹@qmi5ÞyÓa¯%²|@¨_b(Í«k|³MžæÍþõ¡yœ>¶¢Ï-¾n±dî×&}´‹_äbðù>ß+ñ•yˆoÄx_¡m£ pâFH3:NÎT™ª’ý;½lÈHǸùs@Q}P@#­9¾‡«ùÊ oÑ“N5¨³ Îr†²»8´e#gŽ:Xìøã‘ õ_'ëü/ ÿD‚,*æ;Ý„ÁÐéO‰zä·Tøµß ]òïcÆIÅÌ0+@ëÇ­qPZQØŸÑŒjdÇ…5`j€Z ÞBx64jÎUÞv_QP·¾Ê:¤Wp`¯R\Í×½†§±M¶„~ƒÎJÞê$ Ø~¯˜Õ¿¢Šfã—åÖèÙ â¨x#½NnqÇ>ñü 6%…9=)âÆ¿2zæ•Tˆ,)ëyfj­—¦¿€‚š#\Àõ-U‰ÝWnÿj'›²#üyöGœ½JŠÂ¦lÌ:Xõj 0MŠ>êÀ|ZUÇ©:äÅ;ÉAÇ?´mác¤×ºW,Åÿ8WA¹qª‰vŽo߯FXýÚq VZ,׬£°îf೸Œ²è“¶(xù~ð„¬Wq4 gf2¬ÊZ¹ª…^(Rñ‚ AÀb¶Ý(ªœ›ƒÐŸ]v;Ö˜‡¾X¿4aÉ÷yžFÝbL°–ÔA=]¢”$'e;=“Z÷SŒ ;‚û̲ !ïÆ# $€ïL—ývœ$d»þIQÁ‚Gâ·¢€…"yÒ™¿ñÅýhX aî‚Æº€Ùÿ­‹9T_ê.„£ÉA‘pÔMD^ÈpË¿çEªGúcX¹»­dCwåæ *Ÿ Ú^¨0BZªÈNÇæ¡kx?öÍI|á&¨ãšK÷讬Ï:NÝgqÅ~ÏcÍÂEç nGxfÓ/8fÍ€^úmªˆÀ9Î϶òí b¿&"òE´˜{Ù¯8‘îî'é2)Ñ|­È;ùíl‚ùKÿÖÓ’žícéC`Ñ‹Š<­ÎÚâÉI‹œŒ±–‰È–ô5“Ýxæpœ&¨Ï5óK –šíÐÓñp%w,Jñ]½T+kšl÷C²ºKÝkÜ¢¦‰š×ß(@÷9, ʃhB‘9Ÿê÷H6ÎøHD#¦§ ’CqCˆßq)®©’ó1«‡µ“àÅÔée¥i`O*#ÍhtåžLd¯ÍÛç7k:z‡ryíÊÖTq¾"gIÖòû»"6Iñ„˜Þ¥^ú-ø%ÇòÌš¶2nr6VÕmÅQpUX Š&á¤o+äWÅÈ»3º‰›œFô’Lm(‹ Ãñå*'¢¿íéC=a¶ù(ÁÀò1Ï¿•“9èù¯{*KåXFK²×½öf•_ÚÆJ2—œº²ÞA'îñ”rü³œ!ìÏã#skŬÚ]›N=bèïûVÜ&Ùo¦T$ÅUg¼|Ó8>RT5ʵlòÝbî„MPHp^€yt6\ÿÕ^©{䩇ݴ´0*—=…j=ÁÜËÄGC‹®ãpX·I™3R•œ«±°!$Š[y:´Ñ@Ì€÷ù@³²}éj¦†¡B¬ß•—âÝI÷>{ëE˜´Üà=Ø¤Õ /•ðÖû·l|Îïý,[%ÏÓLÞNI¼g£½œ²h¤ñ±8$ÆQØo%Œgü~Ùâµ%~½Þ¿s¥|?ûqµ~r…Ë¢šêM¼¦?bNzT=ö’ëúШUêC%AðŽHE0³ÇFüàÕ3“‹\pÆLÜë­bֈDŽ-}„éÈE»ÿ‹ü`³¥,s‘É-KnmË“]4×Í«KlM¾»_³QyÐÚý Þ?-š€ÝÂèS¬U-ìá§µäA=îïâB3¶Ê~¼,ae+±#“Ÿ’ßÖO:9Ÿ‚XØMm‚g”w’WÔÃçqƒô°S¾Ø‰µF•I9¤ QtyÄ7Œ-%! g±á~—Ô¬¥ÃMïÿ󇵤Y×½ð$]P¸Ö? Ô–å£5éŒåöÐZLu¨Ô0áIÉ, ß6ÌïW’,¤¦pg±U‰´&7´rÿìãƒ{Òô¦W‹:ƒU“]Ix°»J(‹ÀGæ«…ÝVΘÄÝ™C–SWŸîôœÐS%ާå~WÔ1`>©ÚN¹€Áh­$l+Ss¹–´f ?]TШ—«q[°7þH¯z)› )S\mƒ&¤d.Æ1{ûq_ŠQ¦ñùÏn¦ ÊáØ“7mÿ¹0*òÛ½+™dÚÖ-Ùq(ÒŠ;Ì[ôAYvÚBîIuÕ«yv¬!×Ev¶¹™: Uòä2½O€9•´þö,®Šn£ÝÀÎq¸Hf°ÝQHƒÚôŠgŽ¡xUIÙ÷ú‰K”(æ7šüþLd•â/ ]¦Ó ÉFGëÁ_Ãu<Ý2ÞK ŸÓƒªdíàÖé\6¬àZÕÔͲ" Õ­ •’ûÂåt¶TÍ$ÝwaùA—Æ™Š¦¦÷{Uöõ;3âlcI¤Ð>7ãíŒMèß>b0z­Îõ~Ìž»º!÷`}~}Lnsót/³rž!•«pX]Μñgk}´dÐ+Ä®¸ßÒÂØ÷§i-»p Ê‘/«Iðiá›.–y—±¸o½ä=Ohù±;ªèÿ;d¯Ç+•íro˜Æ3=æ~ší¬{Né:((²4õ¾ç§0¥~é¤^5èŠYK¼ù šªjØž”á¥v¤vTR£gu>‚õâJþ±ÚƒõfvmùÜÅxõÅÜ#ÍíÛiTcáv‘,.BsÇh„zMÉŠn7Kp€Òc!ǘ>ïÖâ<(0;8¬–ÈC1¢Ã»hDõyÄ­„܃2éjâÞ¿<¿*AìûA,‹vé~¨‚±·KÍ¢v@šÎ]D_ÚZÎ?l!2[·—RËÌqJÙ7%¬å9 ci65ÕKU0„Q1$ŠTù{ÎÐDûÓpÞZ‡yCßû[eš¾½>”g‚7“MåUá¤ëÏ÷eî²<*Örˆg%B‘¢%qW4†ûîêç_îUÕ†iµ¢cTEqO N•v/iFåb ø–°Ø»fr±]„,_&3ºk‰À4PþÁÜ€Ââµ”êo’A7Á>1G_‚D²©‘äÚÅ÷ñÇåÓm¾ÝX‡ögZµã_$«ê­)¯ÝBòÒŒ£—Ä?HʇD¤Éw,°Âù´?•ã4B_u€\¶ ðˬh‘WÌ&¼DŠT^9f¹µ¹Ûêr]›¨ÇG'Õˆ?ñ˜Êæ‘;=°¼cÒ'}wµü˟رB]pÅÂSÝdÕxV‡0žBEÛ„¿h5-±® ¥b±?ÉI(%àrÏ” øfêx®N,vò÷£+!+ö ôF›R¨J¦/+Ï€Øä†V/[S€ý’o#zü‚\÷±Tì%†?:/ÏôtyÔy˜h›ðJ9ÿz¤¿B— å†DE«é«&©xñþ˜1rŽØï]%­n`ò@7)œ½Ob Ÿ¥c\¾(q½çä_Y­1¶eOõ·ˆ3»ÌzÆýÊé• ¢~ [“X•X˜o.MÝ AÃsÓZÿ×ÍëŃ­šîpGWÍã‚<™>žu§7¡àÐíéYÄ.ìDÀyl³™ÞÉ $xPVE•š¸BÑ=r„1Ÿ*Ö¿ë¾g¦z¢®)¡Í€š8(hùÿ>½Ž‚ endstream endobj 440 0 obj << /Length1 1630 /Length2 17755 /Length3 0 /Length 18595 /Filter /FlateDecode >> stream xÚ¬¶ctf]·&;©Ø¸S±mÛ¶mÛ¶U1+¶mÛNÅ¶í¯ž÷íÓ§ÇùºÿtŸ{Œ½&®‰kî¹ ¡¼€±¡‰¨­3 -='@ÖÂÆÐÅIÑÎFÖŽCšFÑÄÌðWÎCB"ähbàlag+làl P31› 0$!;{G 3sg¹Š¢õJþ1zü‡æ¯§“…™-€ôï‹«‰µ½‰­ó_ˆÿkG%€³¹ ÀÔÂÚ $'¯!!+ “Uˆ™Øš8Xä] ­-ŒÒF&¶N&S;G€õ¿#;[c‹Js¢ý‹%à08Ù›Yüu3q72±ÿGE °7q´±prúû°p˜9Ø:ÿí³ÀÂÖÈÚÅøŸþÊMíþ•½£Ý_ ›¿º¿`òvNÎNFŽö΀¿Qå…Eÿ§³¹ó?±,þªv¦-íŒ\þ)é_º¿0µÎ¶NgwçbšŒ-œì­ <þÆþ fïhñ¯4\œ,lÍþ3j€£‰™£±µ‰“Ó_˜¿Øÿtç?ëü/ÕØÛ[{üËÛî_Vÿ3 g'kSZÆ¿1œÿÆ6³°…¡ûgV$lMí ôÿ–»Øÿ‡ÎÕÄñ_ "ÿgf(þ&a`lgkí061…¡“µsþ@þÇ2íÉÿ ÿ·üßBïÿ¹ÿ•£ÿå#þýžÿ+´¨‹µµ¬Íßø÷Žü]2¶€¿{ øgÑX8þÿ| l,¬=þO^ÿÕZÍäßéþÀ$œ þ¶EÀÖì/5ô´ôÿZ8‰Z¸›Ë[8™L ¬ÿöì_r[cGk [“¿Üþ«­zúÿ¢S6·0²²ý‡–«LlÿkéúWþtŠ¢Ò’êTÿ›û/Cù¿ƒà¬ìaÿ7·ÿQŒñÿ<ü#(hçð¢a`eÐ0²3üýþþ&ÄÁÈìó¿ ù/ †ÿ<Ë8;Z¸´þÖMÏð¯êÿÇóŸ'ÿ#bkdgüÏè(9Øÿ¶ÿ)øGmäâèø—ä-€¿UÿÇù_sobânb³¶lgÄl™–™î\‹‘;<)¬ÕßË:b_Ò \˜ï_m×ã—¾ÃQ¡ÿQBÛ8ÍùÕæ±tfÿy Iy8Ú‹nMÖ“brõׇˆ¢/i“´ƒê0N·>ý\-ÚëzQzL“•^õpwRAQ·øoºƒÉêú™ÂŸÈ5ß•øÉÁ×(µ>­±¹¶àìœ4éäù‰lpldx¨ç¼ï‡*'š„ËÃ7ùŒð—³‡¾ãCƒÑø›+›SåRV‹Z5R’Š›'Îû² ñcì Cú%¾Ù·ð>=ÿ²aœ”ÛUX(l,ca"/5Á¸ÐŒ²¤n]ç²Äù*럋z^Î4«ÌUŽX أƨe±4¢B–­/$Ur~ñÁÅLÍÐcqUzvÄt Õ(ž6æ:l>^„(þZÿ±ò_»üE1ºÎ>øP<Ý@UÊiuÙçò4Ã< 41 Gn‘Üôüü–¡”çÑOoŠe̱|{ÜØ )›è‚åS–•óÃkà|iM±]H5nRWû$LoXaHâ›6œÑ¹$÷Þ÷ɺ-=Z]Ýi",ð |ú3ÇýRÅ»P ÃâÝ—@¥Rм±²y¾Ìɚ矋†5CÔZQ'Ú;8Yí‚)™=‘¬{¿¸ð2O×Ìè{¤®|*¿SÆáCÝ#­b‡j‘%Ç€õèÌè­O%«Õ¡ë\šQ˜Z¦õ/¿#El@â Wwý¤?¦6 …ÞATý@~U¸mäµÙG‘’ØïC{»ºf.ÅçåV¡íwá/}»ô6y%chÌiÛ7¤Ûo̸Bd­§Ä›ZUã©¥€£(Oñv)4I┹纺+[m=Ig)LØ™H“¨EsIySõT‰U¨ù‰×Ig W±Ø Ú„–ê…¸×9©">¹ºÙ£2<æË3 Éš9Ô…Ü \ª½TýDd²6VÄÔ ÎÙSà‡1Γýã ÖZsù”(G“Wõ*|pÅlËä¤gënμ-àq·nÆÛgIÍ{¡Ph€Hÿ½»Ø÷[Ä–· xLV'çT:Dû§õPø(ìn¯,w5TsQ¶Ba!£7MWR›½œÆv€‹ÃîÔ˜xCÝo zaÕìôzK¢?hSø“©Vªðlê2 áxá¹7[UÓ¹’þ#6 ;œ° S^-dúË@;Öû§A‰¯Ó#;­z5:PÑÖG‰B1UüéòÇ2OGåÚJLÏiŠJËíÂ,;–©Š¤*F6V®ü›öOþ·¸77±óÌ&¼)` œ^'&4†õ3Ÿzé P±K\êY,ìÕ(¦ÙZ*ë¤4ß56À Õ~ñpa+ìn.Ò‰b­Ã™Ì2…?é ø'O/&‘A©5ŒŒƒ åÂæh™;}ºô†3¯8Ä.÷=Äp³wéê¤Ïõ^EA[îd!ND#ƒ9r•Èá6nL¿Sñ@|þ9ý˜ùp¬,¥«—x=¤úß ”äéx2ùG}Ü꽀ȅ<…Dîc)OiØ4šbäÖïáiÖÇ;Põ ávZ•$Âw]éO¿ùViõl …#U}ñ–Ä£o–—a^ ‰–V–Ã_ßeæ±éžÄp•MÑíן´;á!®,BÔYLÅtWR|äÇŠzæxhî)¿ PÑÑ—‰Nxû¢ñ矗As Ђu ßiÀй¯m "ïkRPû÷Cß}GÁˆØ%Ál ]xS§qaÑhLwÅw‡Â9s~k(oL?û§N«ú_¬õüjH7ŸoR1¡\Ü•3ÍE¡ >æ&¼›!hw¹Ó<÷ž¸çÕOÛã SZí¦IÀ˜Ï½)H),¬ªŸXÅ‹X“µðóXÕ[Ó•ˆ+|DÀ›H› ûÍÉ™ê.^å>>›4ݾ{;DN5Π—ü»”PdÅùj–€#·ž9ŽY·È&—øU¬íRÂlñ¼zž¥‘­eÑ îZ]Ç!þ®_.#MšÙ2ä\áŠÍÎK9.û3>-Ýt|NOà¹æ²­F­˜.޹Ø#óÏË–NŠš{µl6r™Ñ¨êðçÂàuCí%ªDØsc!( Ö`…¦p¯Æõá¾!A¤¨$äತ+Š9E‹šÁšÞŸ>˜"ÄoÝZ_qëìˆ(ç™Oþ¾»Ý›áƒ2j¯[àÏmMtžoÍÒõþHØZåR“·²O×ÅîWÁ>zb")ðߤ¯×¢'îžNAS—[,ø=tuį„´}³"‚Æ›FØtá꣹¶BÁõHæH=å]z’gËÂhà­›|…ä¢MuLãë»P“JZ®GܪWÿW”¼j(úÃæ‡#²^‘·ïà¨Ý‚WNeÞÌÙaµ5Ç'º'T'ÇñØú=H)QÿÂÏ,Ìo„{nÅ)Bð4ÊcwÚ‰žùàÝdØ…ãTXÅe–›¬>úÒ­¢u+Å&/!HÜó{mÝkHç|‚ïãW‹íY¨“8?A>UHxW+Å‹¯»— Láq=i²}_Ù“x‚o{D®ö¤·Ôî`|AÒs+ûL˜oyÖ™ÄhM¿[÷âì¹²Ð[Ä—:¥Ym-îÞÒ tÖ{ã)B Èg_6»SÇ„Œæ¨¦Ñ¯=ö·Aw ˜žä ªÄþ´mÚ{Û\·Ñ<)Ŭ¡Ï7æyÏ·<¢6oVïk2kG-§§=Êð.þÌ÷Tïݵø+se õgð½.kzý㉂Ùp!§¤e°wj?«ŠF¯ÛIxY~Û¤;ÃwñÈ¥>r™ª${%לÒ©Ê…øO‰&²¦!êÔ;×ú—öŠTmõýï@"‚êKo…ƒ$¸a×tv .†Ï—CôÊÛ¼_+ðÃ}¬x !¸šïN‚Þë¸?V¢Çù­#¢xá²Z®h¬ò îk„ê2 ­*“–Ä»L¿+¡ÌÂz˜Š¾ÚÌ@éòn6—ò‘×kHR‚AýL£ÎrKÖB¶@©Á-[öo‰ýŸü„¨"ª‘a*—>Òö•¦r)×õw¥þ}ž£‰Æ˜~f”I¬@¤,±K@”ú+fT²WªÏz :h¿Ù=33ðBV`‘89ÜRáXðãhgY¢Øa«419ãzFŠìLg&cñ4Â88£K·1ØèW)ÎÂåç¼±¶ÕøÉ‰Rãm|Ž"Òk>!8ÅŒGòŠ)m?%Fªb=¾Ð­ƒx±uNWyjj79²ƒÒcaëõUm$ã.˜'¤k~Ô•‰<›þXªÂ_.oBwê€ K¿Yv Ñ¥ß⟬±‚‘!]bí(žGýô,¬h{Ä|Pz÷:mžUaLþùçÔjÖü}©9žÁ·Ý[ܸ¹š—ùÑÀƒ×´“4UÕ¤×÷žÛwÿû½lx)S{Ù?7Ÿ~‰Ö=¼0]ذ…{Üy¢Öbü¨SÉݤ†)âµ^°lÊ ßôCmd©–¨WŒÜ3lAeX,,é6°ß8õÉù®'éÆÜ[LÙKPŠ×Qø êg&Uîz³–ìç[X‰ZìãÅsêíÚg‚ú%Ý]‚âûL«O³Cš3™ÅÝéÞ@ìëÔƒóÿßpvVp™¥?L>ÑOÍËïû¾×nÃHC)×/…n_ÊÅGH5±g‹¥©înyÏn¯óOÉ1Q6ŸàpW^–7/Aëäˆ(}Ñô„/¡ÄêÉ6°sµ—‘„¾Ù “­•%ӺϦãåÉð^R¤šg´½Ϻwš£ØŸ÷OÏ)ðÑ‹Mœ|¿D±Ð(µc^„g ¡%Æ©»Õz@7ç™°›ÛÇ *•Yý1Ñ]y­ á„´½p5ÀEˆ~¤¤Üâ?RO4)³Ã2åïfïì‰Û/sç±<ø‚ ƼnúrQ^䀛qœ¬×[((ÖŘHÇo[{„Æ/¦¼Üàai/ñŠkNZ¯…ó„¼!YKFγ”L[¬»rÞÓåÚD`m¢2UÎÓ˜ßãÁ¡)¤5P¼‹òD¢tмcj£Zs‘ˆȱàZ/üy´ a¿yÂoO¸5§ŽP{¶b%Å….¿É¥eñ'Pk6¹ü©y‚•ôhT†Q…/Î}ô W"|ãóÆéÅã„B7·:(º£­ùyŸ­ø†['ZŸ—žšõiÑÉËTŒtI²='W%Ì‘´xxè…‘Å/oß*ãfIÇQ.õB’m ‡2¶Ì!QbÊÝî²ð^÷ô¶Öݱ—Üð±‹+æöá;î‡{ɬËà_æð2ax¾Ç.ðõ¶ŸÅÙ¡„’h|¯¾zŽ\Ñèà“ …'µìŒŒæ¾èˆž~f^Ÿ$e¼.ÈT°õr>*xþþ<õè@¸ ,E"EÙFq"ɨkñ`5dqõx¾$°õü¯¿ **Q*zÍ]YÈ#NáàëI©ÍÆÐ8ä pŸ¦&Ëã0µªfxZ”(H©ëVÖ]z]r`pð›»&ÓkÅe\·Eoº85Ô ž¢ôÀ‰«Š‰ù±(©øqY–Â0Po˜ÚÅTËþ¨awä¨^Y½¥q ›'†+MŸ¿ÖL7Ï‚£@“"ä_ËÁÂV6Ië¤÷]]Ïu¿:0(+øè‘z¹ð™Žkùê,÷ Ý gå$öAñµõ À¸ž_ä¨è1÷Îkp³EG)/OÞˆ¸èÍj;Ál´ORwŠÿb6»§µ+ºk<ÝΠò¬Ñªs®˜‘í!g~à«C಄ä÷šx£À˜Lðq‹m¦™ —ˆ Q¶†¾²èÄ'ZC'Õ;z_sôCøvéÓLó]ÜŠð&#z 'ïI&Ûþ¸46Ž™´A¸ûEÇý2X•‚×È-‚ñ¾î¿/%ÒÂz»÷&×ðÒ$tªÞ½KÇZ¯ÕÛa_dñ>øL9ŽF‡ìï¨Ä4ɉiÑ-N¯^¨e­…Ì-™‡OÑ1uwèEZ4KlÃp9fÝ[Åòñ¹þÜØÜßmþç*¸lãàz$b𪕠F¥K5^窓}·v¤©Ñz–ÚîšÜZÑ8ŠTd&ýF}˾ Ï.úà‡óó8•úœÛç¬÷PøS²mÇËÂ,c>ó}ìÓÆ“{¸["¿}Á@0¢ÂäÀ„ q¸6J»¦øróú‰ ˆmd\1º¤Âa4K.j?3¤|ÉF{K´¹S^©çšYZN~;“º6«C¬ÜcSদ\_n8xŠ)Cð ,ò½˜~l y0vQ þ ì ÿq·F@ÈXx>ïFÂõG$,³÷ø’/˜álöT_àÃù†oUp H­t«ý òYd/?ç\à–¾¨'ÞW çgÙVRôJªV…Û7tCuéÊv®ÕÑ­¨îWUC®×uÆñ¦Ÿ,_Y¥Õ½ °ð/KYƒ£Ž¢ *)½_,Ý µ?=±‘‹ŒjIáϪõyfŒ™«SŸ¼6á1ÓZs:x]‰8’ C5ËË1@Lì°ð"eƒ2¦êfsDA7ô{ &}A¸K…ƒV¼ßÙç ÊÐcE@ìjZïýf„™TÕ4B0—׉UÜD±àŽÞþ@ˆ¡AÎðã¹Lœƒÿ…)ž&z¨ÁåÐÔ›õ‡]7ôÞ›4°EO n ÒÈf‡ˆõÑ‘ ¢Cøóš/Œîr§tú¡›ÑΟïq®}솟Z: %V2˜$ÙF4X§j­Åþ¹6u Îp5dž%Ì$™I¹0§´ÒÒûÌGC$hÊ38KæÊëtþi Å3 ?/ù^/¾|«QæÑ׆¼¼"Ó7,uâ¹l´]hÌŠõÄ•Dlr˜)8Š l²ëˆ@¸'AMéã§ÿ\Ç9`Ló4øàMh¼1SR]»`VH–UqŸ„’,ê#êt}Ÿ‰•‡‡a—X¾²odÖÆÚÄ:ž…×L$ê4~ù’û´®nñØcéêÕcN¶¡ g ¿'ñ C¨AªO3ûé/…<Ö7.øßb›f£^-‚‰´œ´ê> !N€œô¨^è§ld@»7p÷“* ò’Þáû1òéÊ <§(Öa]©¼xú2†tK2!Ô·³p¸$É•µ$ ñÐ#SœÊ9 —ÃBȹ £Oõ[×,êÍä2ïêffe 7Ú•á,…@tJÉ/&€ŸÄøQ7>[~+ôÌjô÷·Ýax犚øø¾ÿò³½Ç›4˜ÚÈ sð÷ß» bØUp4ß’1´«ú´ßn2èÁ¦Ý8ñ µyI×XÂ5ù}”Ú´ÓWè"Ö+uU 2Ò/k_Ùºñî:°)FŒH¡êÓ }3ŒãËøcI_µ‰”)ÚßÅá<ÁØjtSJÙŠùªQÊ¡í¾À”lE˯I­Õ„|ÄüÞ|/åEmñ K°j ¬£[š2¢&YîZ+6O>oÑâQg´¥Ê—<¤ÖðÑÒÙQp#K°„SÜxüìHõIcøW4&Çýsžÿ]tuÙ0Y.C‚ã¾?3nùHšÔƒp¥nÅk¬Ã@´êÚó¥K|­ÎA&ê0q¢¤I;(ñoð_«1‹µÉÁÊB9©L­ÆÄvjý¨fwø]»õŸäá…Æ ÎŒÖWñöIŠ®qOŒŽ]ÆðYóGÎs/ç*RÈ'Røe ðTBçCZH >}>§|ÎiVBU‰ÉÃÆÐ2!’OjÀ›mA9åãÈ^”`O'¯‚°ƒüœNÉÝ­7óÅE̓¼ÂZÊ"(QÁ”®@ެ×ÀRÊ>uÃb.¼Ö—Jûfq[ :?&"õx1ÑF*¤yF³ÝUwC˜MÞ¥|›—¼·Ò“Ô 1´MÉíœf7Ø÷9ÞôGt˜¿”²øgÔ&’'˱e7mìî¤Ö¡zI{ðÞÎ rqÍ:äêNz)vó!ÐÜM ˜û¬ix1ONÛ;JCMÙ~Ô†(KÿÈ•íËÈßÀ1§>¶±þ^®¸ú \ñý–j©–v¿ˆÿñÇ[¡Œu ÉB™SiYjKî|%%É¥Õ?j£WìÕ:ðÊG`€DkäuuM ÷rƒ!ÛÆŽÿiØ¡Ú-ûÊ*5‚ 4À×– ñXêÖèÕ’TZŠÿr.)ú~̨ý2¥<[¾Ö¼Q…¥‚n›]tã-…}ïŠ/!%n©QžýÞܤÊ"ìz¯$ãõk†vÕ iœå\$º ›é>ßWµôlgu³æ)—ökr†.“ØGbIa”ËStI+³Ývré±Ðel:|ÎGšéÅS&cÌAXÇ ïµµÖX‡ ã,G@IœÛvŽîÉÁ’mN_byÝ2€ƒ‹®’µÍèà utŒR¶Ó×j›‘qo1ÍEýÇõÜÆ§U=sè\¬C¢µÎ!ZgCN©†´´6tH,d%Û‰ïY²¯L9¡Â˜aÛØ$qøVe„­xÓ¸c°qJ²CÍH×°9†O“«n·Û¨a¾IIÇÚÂ'•rS»Å‰ ,áŽå9£tÜÂkLÖmÓ’4&Yî™ë-‰å-ËME™ƒ lÅmè­Á¿ŠYÑÄw@1Ù-Zí!丌"í“zé L/aT5») Û°Óâ—v³;WþœQ0ƒëÓú„ ÓHloW¡We3Ñ¼Šª¨mÞÄŸ"íù3‰Ë1×fß9¯aÓ,A¦’×;C9À~‹½+üôÔ¬íãUÚ9 %Ç›/Çd|=H? mUˆÚ“ÈKð¬ÜÏN¿ý„ÛÇA+Q¿çVXDtíýJ_ _FÞêñé‹èòîÆ‰gŒçfq\¿ÆÙäO$pWråO‡/Eðhš³ƒjYéªwßÌyHänÎîîZd³£õ`ýaýŠÂÜ85z•'^BB¶ã° Æ8‡ñÆs‚×ñâ•æÛ÷]ÝNŸ±L]Ê6ŠY7c½è£C{WÃþñàu/×pFÍ_F¼ 7w9*zÀËr ýhnE¡ŠÄ7óŒÒü}b¡ñ5ò=ñA8C°º<¢‡¯>Ú_vØ3¶ü€Û+T±>&uè¯-¶ÓQ˜$¾z ´B°ÆŠ›µXtìžû×Tˆò»R…õ¹ŽÕÞÈÍ “ä˜LÏ`ZQðË}fš©®Q{Ap#×åÑœÌk€9›-OòT™s4¥²Ûº3GUc°L“á~5¸”k¾y^€.åM2\G®=¿Ne»µB*…æ&‡ŸûˆÌSÞ•¶6ÐÛWמÞH"]™¹ zSZ<±DbŽâÍæ¢Ðªo._¢ãC1·(-5<ˆ¦!øÈΣ‹³‡Ð±óíò‚ÙWšxÈïÄ`S‡JÛðBú\û¾2ÖóíçPí*K´!UnT.˜íÚ=gþ b@7A˜-41AãM¨Gƒv„¢*I†üPù -ÁšÓíÒþ»äÖj,c¾m©D>6ë6t]ª^oy·r(Uºzê–ìKs¹k~LµHr ˆK±8Æ{ø­Ý/HWqtà)¢3¥P!·åj-'>v]н³Ì /+ÚÐÚ¡Ù½³ˆ@GÏ„ )pMG´ç~´ä/,,±îZ@x™›iûwqê¶=ðn¼z!ˆ„¡Þ|Uæe­Ý¿pÉ6-zØ :\Ê&™žq†EoÊàr\ÀŸ–g|¶Á( ÈÀ¢EQ­ …£„(Éz†…à}|Ö¯ä—IRmÓª¸À,W‡I‘dKP‹ƒ0.žÀ«)&&o¦Å†¹•î!¾Kö ºIv©ˆITðý@—^°¬Zh[Ÿ Ê…€ô(¢)Ñb¢¤oÃwO?W|-N‡£—–´º´7‡ËROF,` A—P$°!-Ĥ øÀ:ÏM÷ŽÈÁ XÔA|[|ÁUwV£Fí§WO]’‹ùû¸H¯SofÔ®˜"OÞÄ$ªÄ.(ï¥à[†ü%™â{[Y4zîã ½VߨüÏÆÂ{î’=ŽD6N\Á'ƒÄ#xwô>õ'„ñóëZÅÍŽ¸{yŠú>h”CA}€ˆájiIËXÛ/‘Ù¥:û’>Z$K5·­ ’†ÅvCA ’&W«°ªµ®Ø½@l ʇ˜’ÛQæçÊ£{ö7F ËB)}$ œùŒýö®¹mÇJÏzK g îßL+‹…ªdNÄaæ+s¤'ä!v¶X,â$Á"Äuo¬=sEôÀ<-¿\ØL £Úõ³@ÌáÃË úf®®Rþ¹’¨|ƒ½Û&)º%Ûø©Šª­<0Ã$ ¡ê:%¿÷¼V·f~㘡‰‡ßˆÝaÖÖŽÁr°£¢Í06ìÔÜÁ>V£ñ ®BÕ?ßN?EÌiuy-Þ~Ón%à|åØÃ‘o“–2EÖRë}ÈgÎç8!¦a¾z³¨:ê¼Ú•Áæìú´H#·ŠetßùG3JÆër-rªHª½‰B¶ÀWžÎž[~Óœ£&Ö'¼Ø›”}M·ziòböh¨NÍÑTÙ‰üÄà#é†|syD»+–Áƒg@=APëíëåæUr »Nb‚›£ßP4Åo~»«ˆì¹¥?&&„x×»O‰” «õIõ$D3 ªûl¶cü¨«9î Õ Ï|x±Hw³GÙâN&$'ðûí›Á–‰,K(@v80L½ÝÆ 2døÛ¯ŠþtGMPf(MéòN/Ö¥óþ÷ר?Tç»Bš°FfTzž‘èršÆ Cœ‘|¦‘$ÿü©°õ|5Mç,Ú…“¹¥›Åj Øéß«?w«Õ¹zϰ»PZq[êг‚¬Ã‘þ³ÜCÊÛ–|ÔbXZëxŠmÓþ f­W®.š™Ó…u<þhm1Q‹Œh¢æÚ Hàët Os¶NK„Ö ”~Z&ñA­R!Å£HÝç”bBÉu”tcŠ1˜yîÜUR¸¾t ,˦ð;Š0šÍ±e—š&jã†|±uö.’YÁ±šþU8†®8*ÒM8á%K™¸?úF4 ¦,çZŽØIpçdzî< Ž6þC?ÁºÆà·¶{f b‰ (Té sôÜ%$I•‚E|«–vì>§»ˆÀü+ª-T÷S…Ï<ˆ³Åô¼ÑgÝ4÷3é²S7¯Wbĉ_ÇuÓð¥¹+.å0¸ª€ çÖG"E%£-[kN ‘-Üóxd|þ*Ï;ÈA2q«%í¶:rVÙ©½}¤³î£8toH%þw÷˜i`§ªÄH-Wb“OÞcwÄã1È<|ý^¾s¤ÈCĢ nswî¼°ö€j—.„K¶Ž^·öÌl}šNBʜȑû'ëÈ}Xʨ6côÏïàuh1ßG LFÑ6{ñÁÈÚYÝÄ<¾)ªÅ)›úm3¹i¨b c©Pš=æg{øŽÜSæÜ˜hÿîl⺽|w7¬\•)Q<ñÊÜVž½­Ì 2ZuD¸Î/û¡×_—ËU–ÀZ„Ñ%oyLµ¸ëïTÞ—ÛÜE…É·%šI>= ñ¸®=–‰b’¢È-cx#›¯fNó/65?dZ„bYmì÷M°¹Â»¯w%îr}Îó2¨Uì–*Q.ypJ L¸.ì"¨––a~ü´çÁKl×Zx§"B­7 þjy½­×|½‘[+$…ø÷ (WÅ ¤ßŠS"ÜÍ ¶Èb–UœT„ÕÏ×S Ö¸.žŽˆÕƒŠ{ü˜çšÏ™ýlɹ4ž^e‰ e}nË:‚mÙŠ µõŒË‚fí§ÆÊvUÇ;rò†Eþ§gØÇ÷²ÃU›t¯K+Úp¡ŠÄÑzȯ̃r„ã¨_\…Õ ?×®F6ß|JÁ;¸VŸßºÖÑFT£YÇ.4ß~ðô5nR8lEêsá2b‘Â6… ¬M©Ä¯ÉõR{4œžÕ4’_ᦑ8Zfç ôÓÏ_Éks›51_Foh¹;³Q"IJª Ù> Ò³P‰6¿ÛÀ¦þkMù•º° ¿ùU>ëàY'Ý÷§‘¢!ô02w.—ßë®Gì®ÍïTQýI%#lœþ0bÒà ºGWu‚1¤WU2–wÐ'îE‚º¥LÒýwÖw"CÉJJ^á<±! ®dŽš¾4áœí&§¶¸˜ì®ÚUÄu×üüè×¢o ¸ª(°ÍŽA KÒU-sK´û¥Ç@7½÷PÕ.ôHJ"Ö…Yx³ð}·£p¶ç|޲½è­~.¼_²c-;€ž_m à8¡G?DæR¡cÚá¢öÎùq,»âJ‹¹ù?ŸfÅŠ#é\lñ‚¾¹>d$œMGnÀóÃÞ£cèý ªõU®F!A»à°áú ‰Ø/jPî .·Tw ³ ­6yJ¹’ǬŽMñ9#wßHx …ôÏS€ }ÜÎôõ<ÀÈ1)îá”Â÷·f~-ºV1㜲. Ö« ÓI[ÐÛ;¼ŸÛÆ”öî8:¯RdR–{‚¬rÎ*éWݤcËÖ‘Ä ÄŠcû©à²hÞ Úi'=T·ðï•꫈¦2a4àIžÐæÃêq R4…|‘ÒåÉ|ýPm'ºÁXÆWX_®Rã"1àgE•@ë×#ßÈáBØ[NŒ¥DßT잪ÀTIb@ ¾û6Ô…¤é5#ÏöbCŽìø)•nÑΨ;7ðó‹5R å1O͆a%iDÚ6ˆ¤$2k{|ê”ó‘¡%ؓɒz«’Æt6¬SnÞ<†¹Þžd%©ë òÉp *ÑUOîõ¡c•=»'ir1Ñ2¬™q1Óô_wÛõ=(^~@IRŠZãxíã€ÿIºiG°­‹aùÈ.t@«­AU]ÙŽœgч剻ò òõpÚžnºkL¡—`Qpr1Ý¿¶8­$ùv‘-$2غxl …’ƒ?à=¹A¶†Å€å2œ…p8ûæP¯½˜§YL`Mª×å> ¿¢èã2¦´Vnô÷UªÈ½ý´x|G¸PЧlŽó³^#A_î’7´¥ÜLÕÜguâHŒøÁ:(²¿¢]"Ee0u™ì\ŒÊX5’¦HOÖ7Ÿ•’‹Àá¡'ïcÑ£«¯‘ÉsEœÿKU}bþ¡×Ê~š1<0‹Àê?œ"õƒ;Ä’^³}2*fåSùrYÉÖ“¡ õ^‹1mxÙ‹-=/rÛ5Ã,`Ö æ|}oÉvƒ!µÙ2LžU/!Œˆzç.^ÀOIš}–ñ¹­y65Ü:ñD+G+É \jóº+eý¶]¸`¢{Ië sj½»šùklTWæ©gtdÛø;޽Óã']g™¤äB¹£?('>ïÐ[bÌ Ë@½ÚA æqÅËÝïŒ?'ìM2¡¶õ+$:­ðêÍj@•ª~¯EÊŸp eêº@¶å>ØFi¿¸³mS1o†BB–§þi?­Ý¾-&!8I‘1Ï6ݳ.À#Ù¬e¶¸pdµùP-¬Móìñ0VØ% UåZÐe%×ÞÆFU¶dººúÁ®° "lŽehÕçXU-¼ÎFd‘¸ÒQJ:Ÿ“W‰)—RÚ›Ÿçµå6&g…¨Äâi²~©áP(Ð\Ê5þˆü/§å°Xc! 7ªoÞq‡{Öºá]Öø š{|%oðNà° +g…wEë¼OÊåF’ $fµâ*LæÛÇ÷)hÉJkS ‚Þºáù ÑÎ’_ö¡úûÙ'ߤܲf¡wí¤è]j ±KˆªøõåÄhˆv&ÎÍs ± äÚÏÒŒý¤WøðN,‘=‘âдw?zºiaˆ'®úq˜ @Ñ4cá“Èò[äÞr¯FŠ KGaqÿaÿ0NÄ ’d¶§U[˜ ÖôXÁñ–ý)Ëß6Ô/tˆ‰V'GÙ›«\Ùªgˆ ¡­Òv“õÎ ÛÿóYÿ9ŸÓ'JÁM7üøÛÃGp¨™i1[Ø«Ïs€Ñ-Å»÷eeƒq"x|ÝŒ‚É ñª îñ&ÔžÚQâ3[°nõ´Þ‡HI,ƒ3Y„‘ÏÌè'ZÖ¢–4_°B]Ïe );þ€…N³ïæü½Ç) |Å–Y ‘Áþ¬ñí¤AÛqøûEÿ,†^ʇ\Vß@[5t;Q-Öõ¶Ÿ¾Ó"m0†F¡+<éz*:å¢Uà(©FTMËx¾­Â ™‹M£žº”-m߸¦îo½®—ËvžsícÕzòΩlÎnÓbv(ÃÃñ•ÌrëÌ@tÖæšépÛd){l$Ã÷:$¿HaŒ€Â2cktÚûôQìcH¶‰‰~Dšäì®â œ†—ÈÒf‘êå<ìØe}r*b˜5s=|sKæßá.·ˆÃ…BW¬INOr©»$7•ru…ZpmB>áy<‡Í)•ã"x«XjèêÝû-OÔýš…”€éÀOÎÌè³¶8À8F;e,@­Ô…Ù|ª®ú¡W*„:´. ÷’Æçs,¡O¥‡IE¾LÏÉîùs7b7¹¡wXÖóQV;*kÇm?dz¼–ëä¸wk ’‘qÍ –±Ø»’©)f+péàs–×6· Ï-ÆD8L5;(Äv#j®ês–qŒ¯óR ,íЮ|-›íKxÄÎŽ)_˜dó0}Jˆ¥ìëí° r©æì3*µzºÈ,jOÙÍÌ3Ñë¯úTÊâûÁõ4Äp"=Hìµ<ÆšÏd³Ã‹¸qíG z4ä廨âòÙÛã Q¡ ká~}’•ý„Ýc ë[í™IK„Œ8.”ìbfEªJ‰šW‡)ojë¾»fJ3øŠÅ]”‹WåkÎÒ(ô*î°mP]ÒñØœ—Qóÿ‹Ô;• njÿTªNG›¤ÿñ­–³—¡Äü›·â'`_|Mæ–uÆÄ=ƒxxbtDDª 0Ý c1yyØo ôð}:ëæ41hÏj¦eð/mðµ!æB‘¬êtƒ”g ½¼® (‹1Vª>4]:_ÇÍßFùCS Ó§6¬âèkÌ ÛZ ]ìcf1IŒ+S—¶t¶f›¢*Rd·/%¯;[¢ÍéÑ‚¼Dr¦Ù²ðj(×ãE©¸.¶ÁIÃ3.AèëÙéC¾å=Î5±ÉĬ5K¹_·.ø¾ü|z”8#º´ê}kER²£?9H3Øì¤¨!¥ÌX}ç èÖ&Oÿ^Q¬ä(ZÌz–Ü¡àš†¥²a £~è/½!W– Êÿ‰ºédC܃‰‚@úä»BÇjq½¾§Ç”%“ä®ÊjÝŽŒë^˜k¯FóÛMûf‚òp¾Á4`¥ï{AIüÍ5òG{ÕY¨”'Ú• .ìãnL\ÀÜè"^jÊìÎÕç‚ò+Œ |ü¯W;NoUªÞryÙ›,Ý’ãÉFæ] ¯[4žÝM—ң.ÕÌ&ñª×åqïç{8CÜ`ÐëZW²ž~@¡¿²lɽ\[¼–¸Ê0åJVtð-ú±¦ÏqRfIÝHõ–Œ¿®iéúhÝM–Î¢Š®Ú'$]1Ä4k/ÑÛ¡ò,=Ám ô05’Žœhl;ÿ§5ÓÀÜVἈ÷ƒ0î6q4‚.ßXC¢¡iýù°¼é°¸ Ù\*u‰¯Üփس!ä!Åë¸?iéÌì½òä¾u=öÇRCBV¶jØË]'|ÚàÐÙDõðRÐS›Ú‹“ÚˆÐÚÜTWÄúøÅM¡¶—8™låJ®)!÷ìçNsºŽ…qöN¶ehÈ+„ÉIµuD–ÐÆY\LDw4ÅÄ—ð™qRåUn'ç~?ƒU³¢B‰™^>I×Kpö©Ž$ͳóŽŸìRZY}ݽ¼„›çK¿«èt2cTåÏ$ «øVfÂmÏ´R «D×û–%Ûè´e.ØœÏhcøTÉýÈýSŠÐè Q©@Ϋ².ã:ì+ÏÀ5ÏFKðÕ{¡W_¶HNS¹F®¸×óÊpß­uˆ Ý—?•]½A¬¼À¢BNˆ–ü[€›Óˆß>̺>+_à³ šÚi»™XE(öcÑõàƒm¸_з»vÇç©nÉ=—øÔèú÷[ ‹Ëò[aù:n,EÀ1É©´UÑ0Ip06š|–D—††Ê1ž×û¢ßÜT8¯Ú??†€Ç¶X§”R¢v5ma‘Ë·‹|â8…±ª%ñFŸâûsÒ ÝÕ9”€O¦ÖÙ¹žŸÔOÄävATÔÕ‰W?R¤ì’oiÚoBl¡»Ø¥l¨ßC®ÉJ :íG×v]µn3Czc³¬^ÓS-gPò+¾ÃÚÛŠsLÈš<Ö9KÆ]è†ð`S´$c‚/CÙ„ù3Þ¢h¿eõ:øÆ€%÷{í‚á¸ñ6š¶a;w±ª9 …çÛ®¾Ütæ„L;Jžkñ=cNßì‰Æ¦çÓû9(‚°žçDÄË劻:,SkJ쩇¦2É"é Ð#lß{.Ê… eŽg2Û…Ã-‘‰m¹Ø eX2hñGÅŸýÙÛp Yà^|?ýf¸w0IƒeB­²â^1Ôl­07Õ5uœGoÅäñ—asáy ~Ù«#àæ|­ ˜úNˆ8?M§ÿ¼e‰¹^& ZâÎBùÃücC4dÝ˨ÓR†Îšœ—Å ùóê+mjŸV- Üæ È›Ã[En) Y#ð=Y^”MQ`„ Å@mx•‹)ý• 9ó“jD3!tÅ4#.:Š­'=z$j]3ÄÏå3¹Þ2½¸À„€û2Y¹®"«6°ûtŒéußÃöÓï–‰LC†màîrj·jŽ2MW/,)Wö-eFâ9-#îR‘ŠÇ­ŒØj¿?>X0?d¬ë3âYüCñKØÅ²Ža€|pÆ<ªcg7¾Þ!=èÎq>úðÝvê‚–¤(àmÝûN¨à»gKaˆ¡ÇwHWAž”V¬ïzÖÔcSÅý÷þÆJüÓª6Œ%J_£ÕÏ£*ø9 7+éœ4Dºé°rOÑÕ•S¯hó¥f/û?÷: ‚ÑmÉ”ÛåþNU©in¶Ž8ô¨±/¯™Ÿèg5Õ$8Ê‚^ª=>m\ ?¥ô‹D•ÅŒØî ¸s°:D ÍLí¡µlUr­ò{A-­Ç~šòú6Ôh=Aª_{PÅ-#“w‚Q˜çKjB¡ âfß?T:ÏÊ/ºÃ‘!ƒhõ¹*Š÷î”&Öâç‚ûKaÅWZÁ¿ÔL´^ μþôãWÓ}¾6èÏ[ûÆÔ£D>gy,éGêüz½È¹€IðÞòñ vÁumŒ!EœÎ­æ…T+ÖQ$âîÕbÁÑÑ ö%0ÄiÕl…i„ß=¥>£™^8ð>¢<Ϩ#=ÒøYÄÅDÒR©Ï+UîÂÅUÊô6~8ðýÈÊAØA§ªS ¥ŽJzÁ lÝ:§úT€ä)¶¦\ñ S­†ÛB%w/X$M+Îâ]?>ï0Y–è¢f0æ—9õPX-ðn+Ë–=ÖÙ¥ÉÍI=\/ï邲þm³˜íª~LåîÅÀÖNÒÛÑâèìãN”{ÔÆ„7OXŠÊ09ëZÞç‘kÞ t™ôT"µ/ú†Aœ!ÏG‹9rJpoü8˜ŸÌÞ¬W(Ô€î'ê }[Æ„Mh2fŠ`Ÿ$†úÅP÷EH,7}G#­ riÈuaŽÒMèõu D1ˇ,¢ÙÇ Tº©µæS_ôJÖ1Y† Ãó'½ˆîÜõ®CfxÜUÅfʈïE³•iÌ|fˆ²ðÙ@Æÿn­¿ý%!î¾Ól%9ŸÂÓiˉäMy§&Þß~·:˜æMŒ£ïéÞ ºu³—e¡‰â¸:jØ*¹‰îì¿¿ ž•ôµ/ìÖDÓm\—v[´SÞªz–¦¸R.ÀéøK|²#Îä?ïù&Ùݦú•›ð4¬|IÜü÷ïRŸ ðP¤’ž‹öO'M¥»Ø@nu\¦íSWx:¦gË%”ÛuèEÞøLZßCµbf•KœDL Ìê\¹õsc&[AJutØcÐl¦“~£öO׬©é[Ž^\h¦€íYí3j¥‡*o_º ÐL~ÃÄ/¶9\q™ÓÀ-íïQ]³× p#5[#´l ¾¾~²us‰d ô¼à@ß°xØ,rr߸»ûNR¡/<¥wù•ó-Êl¡µf>ª˜yÄÑ#Š‚‹[Õ!]3ðC´”T ýˆøf@k¾Æ~¨žB‡íâ*UõÄ௚ p*§Xb­Ô» 'l1KVÓ £3U>íì?FLO+ÛÕóè2ƒp¦¤éEŠ(“ŒïÕ~U`(VÀcÜ¿ôäǹW ^%À‡a‡àõ;L’γtWGo´I×~Šhe0X¢•Hx÷AžÎq1e€DõŽ5³^’èsZ4£Q PQuªoãÓ º×¨;¡î7‰ïØ`òŒ7¯‘(™Íñ±3œ F¿Õ…ÛBkÎvbõî=› m<ªÔ€&_À°ëßM̃¯ MÇT„£53yo¼"˜ðÊçOÕÕobFÒ Ÿre  lHOŒH] Ž A¿Söw“Öã?¥pD wo¢@}]ÒDʳ¤J+ùÍn¡ÙÖtåJÖºÊÚ‡Ùg‰d.õ3$zZ_a…”\oãZÜö?*5ðã̲„; lý4¾W‰zCQˆ¥5ƒ²U»$DïŸW#è±ÜT’+¦¾åFÉ䧬t“Ó™¿sÌ..[=Úêâ»]ëÚçx0%' šãp?µ5ŽÜ_•û›±q â¾(‹¯ýÚ…$Ò±Éê¡âˆqïd[íôϘgú¸AÀÊbo Ì>°É–;É5â¨aCUm<{,É:®´,ÜȧZÓ/%­ Î¥³YY”2дî{à›¢ñò…s+ÚˆQ¨Ÿ~¼B)QuÓ%µ…Lã™UéÖác‚•€Uv›á»ü9â×VªÁÀ³jTpM­‚~KAá ™•ŽT)”Ó|ýz‰uXÜÀ€‘\’¦’ój8ÿ´/Èv¶<#HÚª+ݨQh`P܇sŸŠhÝ`ßµõr73Á/s–Áùw9™JoVêÒÆ%‚ÐRòRº|T]UÌs¿êéïÞgƒì©1×»n»à¥âµâ+KÃÜ¢ :?Öœ£ ¢Ÿ &+\øQÐGPÁ ž‚ï±®C>ΤnL²=;;–]¯É-ðöé¶L ¿LÕ^#ÝÀ{‘k?ƒÐ4DÛGhl‰«Š?à&¯“ÿ2@Àª{±‘â²NºcÔ¿˜Ók'ÞÒ¡zN—d¶MH’6æ&LƒOU€HǨÈK Ç9Á§@È i™÷~ÑúÒߦ^ÿšeø‡FÎ$Dp·÷»6hVœÕ‚4 ÐÍà’ÉÌe~æD·©BHõ gnVó8ƒ‰‰èßï±°lúŽv”q¿á¢ubˆ"m±Câ¬Dxv`ÌË¤Ž€“Ög’ˆÛ„Þ8GÇ5GüN¹åÜÄ © \øm( â§ÙuÜZî@BIâõãζ­³´/?Ù=syÝøÎ ´£ó‘;õн@Œ{ª+í”_éºhU'x{wYš~Ý€KÆ ™¦»€ÞwqœÝب’ŸÐ Õ‰\¼ŒéIM÷jiرkeõBK'—~êYÕ=#Z“·Äƒ™ö|ru=‘üž®dÛo¥œ:Ø{T@v–:‰dˆÍ2€\/¯X̰dÔŽžÕc;Ûä UÞS_MzYüèe¨TY=ÚZ}™¥É]‡(ƒr0¯¿Êö34[ Þ1`ÿ™´„y|©þ¤©uf/%¯¬°ø 8‡‚E“Ã$ð­T1L)K“žŸôÞùZX{ñ­i}Ds ®Å‰ Ì#MÎ~SyF¯Jué6u ¥Ž¯Šf£çë ê¼U‹®1¡ÄJÅi0^‹or‹×:Ÿ©Ó9u,¹KpÄ}˜óf7µ®þSýÉÛ몦º>«o¸jÊÔRS¿þ=yG9óµY8·hCc>²® ÆFÕc§×^ŸNS~q2ÛÿŽì­Þ'‚äs¦ÀaAå‚J‚ýD"Œ_6ø„Pm(à¢qª¯#-+ñÊß7^ÑŽ—K9¥;]MpçHNˆž<Òbùìdû’¼_#Þã?!Y …Dà fƒ¶9+×7‰³ÍeNž?3×p^ªÉÎûm–èöJôÁ‹l§Èh¨¿ý!Ó„°Þ+í9¤M ÜBQ_n_Ë•„Ê’§¹øo¯ŠÄ‡fs']vfÿ‡¶²©y§9è¹Î"™eð¶(Öz(Ú½Ii6âÑ9é,ÃÉ<°i™údÇ‘w†AßPæéEn³‘òGþ\°Hm¿Õ¡_©È¯<¥}g¯5}×6S©[^Â`! V ])ì0ìXsi'Þt°È–>µýgIFu‡#`îƒwåà··¤Ï¦g~aSRGäróô”9‹ˆ CßË…»Bu¿ÕŽ“Ù]=d xIBvï`Ö²‹ž E{`ËCõ™dʼn fe¶® âß'DþE4cì§°÷æ7”y#’y³_š4•* žj´X—¹;nÕ>¾×þɺqÞÁÌIù¥è˜î­Œˆ.«Få˜è6[ƒòˆïC<Òù};º zkÊ_¨Åu¢¤“Ü<7ÇO¹ÐS.+z¨»jî´¸”—½™Kû›¿whQ)¿§Ðã玒/[q‚qìAØPRÉè }nEŒ| 3EÃÂE9,$8Ô{ P÷î.]þ"qÿJˆ·ðö îeVa!ƒ}uB†ú÷c$óÙRCW‚xÍó-X‰ô$Óßj8‹^uG‹h†YpÚ»UýKÒò Ù/¨Þ1£5RS£b}F¿ãXˆÁý XX(4;½­ü“ÕzÐòPóOb35f¡#’}OË;ZøëƒŽ/…?<>6““è\(,ÞT–ehcŸ=X2ú¾š~!öÀ\0ÿ5’Ò®±+lèf°ë›1µ¹ë„+e¯É,V×Ècjg05¡ÆV¾~øý­Ž_¦uÜlifÞ%×[dJ@G)ÂØ(ÿ†±“êá^G¡Bžÿ ,«÷—¥™#S|N<†FDn8jQ ßmû¥/Ü"ÃM—;n¥ÿD- bîb{ŽJÉj“4Pñe¦¶äð^Ž*ÒpTè(z½ÕúÊÂvm¼_Tã´D4#…ãwwHœ¤Žd¹ œzµÇCÙ ã‹ÄæFr¢Ìûo2“ —$R<­BýÄŠPSÎgÕL¸"B͂`?ÙÙüµ¦­šu9éjÈ¥ìo¹B›Þ¼¬Ê裉¡6麴f¤zeÇýúbÍc^|ˆÜxZšqÈ.R#W5¿þ¢{ž·¿û¤Yþ7 Õ™Vx?ÖŸÁ¨–÷òÊqcBÀ³F•ÿ?’ðX<í«àÎôl¬ûû;\Ù™Ù)ð»ÇVOra¼¶m¼¤™¨`^Æ”i»ð&)Š5‘‘£eK—³ž¾1žPªÞ™~MœƒIêè­nû9íÕ †¹— 7„• #Åš7º±—ãK©dTW€>}x¨ä0íošV®dNƒGž¢™žÚjáúeµÑZ7ƒôt½zbêC7γ.Z×Ä3Ÿ±‘¶x÷lÿ³Þuð¨÷6ÉM [f2¬„ÕFcP!|¬›7ÍaÐûºD¢)íq%å¦ +K1ÅÕ ùhþÛ¯ ²Å7ù6³ä ÏÍ"W„³„Ÿ³ endstream endobj 442 0 obj << /Length1 1647 /Length2 11149 /Length3 0 /Length 11994 /Filter /FlateDecode >> stream xÚ­xeT]Ý’-îîÎàîww ô‡ wwww'¸—`ÁÝÝÜáñ}·oß÷½þÓ¯œ3öª¹jVÕšµjŒ½©)T5˜ÅÌíMÒövÎÌì,lüe­©‹“º½­²=Ÿ"³:ÐÒEÎÙÄðŽq#QSK8MœAöv’&Î@~€6Ð 4ppØùøø¨ö`G¥•3€NK]›ž‘‘é_–¿¶L=þ‰¼{:,í4ï®@{°-ÐÎùâ쨜­€  ¡¢ª+§, “QÖÈ퀎ïE¨º˜Ú€ÌŠ 3 `aï°ùÇ`fogú«4'–w.1'€ À 4½»Ý̀࿠&èh rrz€œ–Ž&vÎïgàlÙ™Ù¸˜ÿ•À»ÝÂþï„ÀŽöï;lß±w2U{'g'3GØðUURúy:[™8ÿÛ ôì-ÞwšÛ›¹üUÒߨ;Í;êl²s8ÝÿŠe ˜ƒœÀ6&ï±ßÉÀŽ ¿ÓpqÙYþ+&€#ÐÒÄÑÜèäôNóÎý×éü«NÀ©Þ ¶ñøÛÛþï]ÿ™ÈÙ hcÁ‚ÄÎñÓÌù=¶%ȉõ¯~‘³³°°³ýÃnîþ'æ tüû€èþêú÷$LÌííl<æ@ $Ve{ç÷ºÿ™Ê,ÿ{"ÿ/Hü¿"ðÿмÿâþ»FÿåÿÿÞç§–v±±Q6±}o€ÌÀû 1±¼Ï€"à¯accâøkà€Ìþ/W[ÇçüﻵÿÈú?8ÿþG1;Ëw…˜Ù¹Y¸ÿa9IƒÜæª g3+€…‰Íûáýmײ3:Ú€ì€ï"ÿ}¾ïNllÿ†iZ̾Øý¥÷?  ù¿×ð®Ûß°JkhIÉ|büo¦íß›Uß»ÂYÓ üG$m%{óÿ\üE%.nïðbfçá0sð²½_Æ÷ëÈÇÁåóÿû7û¿ÖJ&ÎŽ w€> ;àýÿŸ¿­ ÿFÊÎÌÞü¯>Òp6±3o½ÿ4ü›¹8:¾+þ÷4x¯üŸë¿/è4CZY´7¶NÏÊp®ÃÏû1.©ß÷úG¸¬Q³¸Ð¿Æ¾Ç/=|›¯Òø¥6„¥i’ÿO›ÇÂ)øu_žá`ø;ž mO*ð¢€Äç}o!æM/ãA ëç2ÔŒ3íh¯_óŠ[0z¡¼?wW¯Ñ°`>­_+d+­´^‰¾ö|i°â•õTÇéÆ.Àžõù< Wé=tÅúÐÂÞ\S(izÓs$±ÙEð5w•g:¤šê")WAôwŠÚíÁ ŒvlÌeMé"ÆÀ ÁKªnúV±"C¸ô…ÿT¢UØ´²¿qj)hV3A±‚ÄœA)0Þ*B Õ×x¸Y¶mŠrÎ’¨x'ªÄO¿…—k I×k‚ô)nQòU˜±¸Ž ÇÌ×MNù,XP[ÝÒg'U92·¦<œò"m¹ý­‹U™¿ïFŽ6•Œ Oçs‡Dø‰žþ,Ä!ã·cé®Û^ZÈHͲ¨IÛ!ÉÞšï>·à%i«ã,%7T>"¨yº—Ñ •Iá_SXß4–_tu¢©•…½ 9““%ÔJK"£Úä}‹¯lÐòicN Èl«›ê$zÜÉ¿á)Q%ôÎó!°D?ätóñe%E¬%]À­†¤¡¥-*PwµŽG5±Ëz­"3/”ÏjºÙgò˦þöì5±“¾ÄHI[ÑD¸Qó<«¦·Ù@ä4­g¤XE^—ëÐ|= Ì©Ûý¡Î¯+ éz¿ú“Ï0e45Ûµ­|[hŸ+‰¡O¶F.E\:¸=C”it¦8Zx¤zãÎèJvÓnË•4²?8…mùt^^lëœëŸÇöÜ3tFõÜ=þ˜i™ŒÃu;È8ë6Ù=œoΰ|8ü^hÙ­öľu¨k¯²k‘&Nô'ÓØ,ÁWÆgac¿¬±ZSá>1~8±D±ÊÃnl¡Ò›F¿ÙÓ¶Ðú¬üÿœ!¬ïìH­Q’›ÂˆÍe•QçÓװ˺*—ˆ@xzóJÃ9çûW©›ˆÄ6#Œ/N®k…aAGÉúŒ ÜŸf š4àŸûTÂÈ3ÏÜ{AO p^¹’ÈãÛÞSŠr*âC®+²L¡&÷þtŽ«¦Zœ¶“?Q1Úy Ú€zt–çÑ•$’o‰a×·‡>éjaX³>¿’× ZÖû’! ¯sýœwÚ„íî5Ç\#=2Ù@xÅK›XÎTº}4îÖ¢üA˜EÊœŒáZÿC)Ó·OGKßÜ Hëzÿ0EtD—Ü=i%}zu¥1"^‘ÿ}”s8“_ƒexž/ £Ã¢Ë tákF5$þ…ùgòy¶w~¼Ì­QˆÒb”/#cL”{š‡Ü2n¦‚€•)› µOdûã*-G¨«%Þµ·€Ñ3½µv-Ù›A…A­¹Ñ‹ßgqŽ,XJÁ‚±®«˜ïD#£mc÷Wü™ÝL2±}Í2²Òœ ˆ“˜Ý!ÕÙÿ’opw¡½i‡xøÎë(ÈËJ‰:Ôgµë+›=×2?sA?!§2ê&~„uA§âÊ4hNUà`ë%ý!"ÛÌ{ص3T´3ðh“ê»LtÁ3Òg‹%'¬1ãå(®T/2½µNwÄżAfxBCÆ;ÀÀƪÍ×kLS–Wf|.Ëý-oý‡MPýl¦ÔvEÏÛõr"׉—"¸‰ú„¯Í¯O<¸€Ùmàª~+võ …8Íð< Ò!Ö0)sAFN•e2êŒ4Îè ?¼r?»iÆ´ˆD&†Êž‡•¨Tí /Îÿ°›Í’í3d"“ä~¥¦.Æâ„|ÂÇÁL­yÞãÃHqgx Æa§í„n}u1;¤&ô‡Õ üè´ÌûsÝ?"â0©·S¦‰‹úI¥åƒ1ÂzÌÅíFÍ¥l;ÿ åì]Ñõ¡^ÈÅ«RS[ÃÉ0ÌÚáæ3V¬¾ÎD¥_ªaü߉,‡¹&ikž†&Â)ãÐÖsöï‡Õçd3«8ž+p@uýkG¦-þ1ù°.ºds0ÜÅFe½¡+·Žh¯²‘ÄgEläNÒƒbºipô’ %ŸOÞ_G#³‘6ò5òÊ;—Ï$ZJ°BMBŽØk’T^¼¿†g±WD,Ö`Ì¿X‡–佌 A&\t Û,AûvÊ':¡×Z%çÌx“*A£z^m Æ _Ú¤^¨x­¥®7Q(ØœV£IÖ_’6““~þx»€Î^ •yþÙf¤ô…‰¬$Ç4 ýI¸‰ª[zFÈØÛoãXa<ë‚!™À¢öæ–K#y ò´f†¤³o"çŠ <{`´µ'j;vù\î¸zvÒH.ò·ÞHÍOó$a£7æ>Î Qó¦¿T8è¾.Ø­/?6}°ì¢r n[e¢ƒŠ!8/náWHÅòÜÍo¹©xÍ«XøeðØ·»ÿXuì‘úÔ½û¼€ós6^¡€Ø¶ùýMi5o¾ïHaúhzØU—¨z=í‹ó ‚ÂFØ~0C¶X[‡ç6eï¸ôƒ. _˜ÍÄÄÑ¥Þ.94{¢¥FùUú¦žxH<€ý£"7cÈÇWÞê'žOU’VbФ3öÅžµí%¹ùôOúqæÁn”Ð7“N™*Šß×?(ý^ÏÂ>dAï—ççIžBqýÌåù¼Î¬—qMÁÐÈüu]yžãóÊ&¶Ò=÷‡õ¤;ÉhŸDЏÞrÓú!¿ŽÔ¸–íõº¾­¯D4’Y„Uœ,q¦ ƒ¼^óÎLn0lšúÔö»$–:¿Aè:P`xÑÀúÅ39›kG21ÇÞkOî¸?‡rH¢¡ð8vC—íž•"}ߦ5U(•5Aù µ×IÕ—‡1ø<ð¬ÛJa¦ôij'›¤}‘JÄOÞƒî²KŸ4ÑΣnÑó\)Fß»¾ó|éj¬~K)tôøÔ>ijÎW÷t¥ìÊ+;Qyž´~«ýíL4Ö<èâ¾câ6Íh0´¥-öÅ1ž )ó¾GBp©³P˜Ó”u&$µûí*sÁtFÃù€o¦6¼[¢âÍO³õg^ ñÉZ¡¨´X¡¥.«p¹ uª,Tr­aqá‘x»ðÑØoŽ""îøåˆÑÂ{ó€i޼Í8 ÙÜÜÁßÄé?“ÁãšïB¯OI{èÌÁ?ãÇù%í†LxÊ_q½ôPŸ™íÿ¼R|”~Ðpüþ0úÓH~n$Œ¨ã¬ï´ [Hfå ïÐñê>®#ãÔº»Ežª@gýH”[Ÿ›/$]rÙ“q 6\ã,½®ò™·ÈícÔG÷=Ñxïe.º5ÿ‡Òr· ßTÅ¢ßÑ“ ,Ó?8álõRõ+ûRù‚°Ìò~º™¾ÁÝwˆE§E’dA5Ï^¬jÎÚ˜ä5¼í`HÝýììLVàö¤—Á£ü]t,kÑ™ˆL½à°ÊÉÉ‰ŽŸ¬ÕÚ6“•º9C‘¨A¶b#[1:pŠÄ¯qÔdG4k´P‚:ù^[ú\Ucø 4èMr·‹^LZyïXB¶>/·MŽW·ºÌKî’mCn3„YîMðÝòÚZôB Û P­Ô⯂²¬ºáÎÀÍÕâ0ô¼(}Ž¿¬#c^ω…ø]ÅÇ%Éü „gæ~¤U›Œ¶"iCdЀqIƒxæ|Ö¼ÛGÙIµÕãss7ó#cA7)±M1õêÕ‘2ÕÆ<°Ìíf'Z™¿žDd¥8u½»§ÙÇÞç;Çõ¶—º¯? uü-â>»N²äÍ`L.-câ,Û‘W0¦.ð‚n`“fÍ.ß:ðõ¿¸."±¾ÅMá>‰wÖÀ ~CÊAdWSYßg…¾ >ɧ©Ä€ …)‹êÖA¦²ÏÝ®O‚…Чq¾–K47T†ŒÀ*j]ÿò¡”=Û¤©çGTŠ®l(~c6AU š){•½p™)鈸wb¡¹ü'ã^Ænþ‚á[Þöt\E·Qúv·+&¢Ž"_Àd£e;ÜÉ#ÍEÁsš¢` Yq®‚ÔD/Cï¼À’†O"<ê®3,0Å]ßudt&–ÌL16Ò£<ßÏá~Ú‘à*óž}1òwá|ø: Y‹E%@.äj+˜“º_Á»¿ú±• S+_ß“þ–ýÓÏŽŽ[¯°Û³ñÌm=$îî¾o§”œ•u³ƒfË$œÛø ó(qÛ†óßEßü»F÷üûa=ôÃ<£•¦ï Ö‡ô±7»r}4¡JEî¨Ý²€šSP¾…—.þ“ }×’³9 Êú$â¢*»íÂN¤ã-°sïïw™ä6¿=¡«16ó!Yû.+mn6SÙá†V4è¾2h¤Ó¶Gíå’u ýÄHâ—¸¹úF/ÿ6B…×ZgZ?§4"Q‡´:úƒq_<,VF(W Œò]=;”»Î5§c »;ÝneXÖrü뽇ÄVSçÒÇš)nÈD&;#¢‡ yþ'^ÑÌ6¾ž ^Ì—Ò78k¬6š‰™r}£ãÕ[Ž¡$õÊnïh¹ä[šÒP¶áUYƒ¹¼Æ)¿ Ý% !o[ª§#‹£‡‡Â¼´JYgÕ­ts0Õí´ÈòL“ŽMä,¦k•\D :îì{‘RF8Ñô—3#{fº-Î_šXø ‚Òdö 5°+ )·(Ô¥ÜRTºyÏÂ÷OÎjÍXa^© zDøîuý;.4ïyG}Ƭ‹´˜wOÕ¹®U‰çY­ìBÞ0º ÃP%é“G£-ô¨ŒÛÀ’H‘2ä‘óÐevé¿ç¬íï„Ì:‹–éê›Ã]Mbx>XÒToUpÃ`0{|\eÄÐ^F)n²9(G$ nwòû ]Ç÷@Úü™˜øTŸ&-ú&m#XÍÄ]ß"§š:›C´YgÆíÔ?„º1©#Œ2Š«VìÂû›{{NÔ_,!{ ÍÈäxÐNtŸ*‚%; \qZZ@c.Lаl#»0À.*ïÞœ—ÝürÔ°=Š#©Muœ0^yÖ4EÇWÂy¤'‘*•[¾,]¼Q#‹²2nñ°%„yüÒfwC!îpï¦s÷íD¤Â‹¹¹~'‘ê6M¢ Õ£”ÖÛeà(ƒu°5V™ ¯!nßzåU˜êúuJ›Pp´‚§¸Å™Ù1 V]9äæ ²ŠÌ·[¶ú!¦Y]zE˜§ŒÖÎ!OTø|–Bœ}'ëŠ$Tò©õ+×â³øoÔHFÁéb÷¥ Aü_·Ð|¼"\ý¤É.±\73;f° ]§ßþL2ÁúG`¨¾ð´ÝƒõRcb˜Û¬j?g4™2ϳ-б!ŸÚaH½¹¤©¹›¦¸HþÂhò&À¯¾DºA¨6ÄÇ¿ÏvwãääÝ =t;¼S}â£|òAÂÅÃum/Úz8y§õ¥B&Ê.èuúÔú@~1J˜ðšë%¿zjÄxûfü£Íf\OÐ=š;ßö)_6Çç‘‘Ø4Z#ÔúV¡–¦Å+Àsíê€9{3z=ÀÊüf‰í-,¼|‘k :Ú“?º|\NK”iwÖ²9ó¾1„ óQZÅË– étÁ’ºìã‚X  Þâp!¾M‹E¯'!ÛÉÎáÒ»ë/Dˆ« ÃôÁ*mùØNY?¶ ’$4ì=Ƚ€²Ëpã|eÍ)÷,©ÆÖ;ÿÇBGœW’,%;Ï:‹€SÒÒÞp’)µ?1¢tRŒ@©Sëºübœ v»Ø Á„ñåEÀႯ-5ÌÕ ‰€6CˆLÈ|Zv²«ãgqŸÀÆó KRÑ]©B<»}2+˦ 3ŠrT7‡éb 㺙ßÁâù•msz–Â¬Ô ßma«½…ë(k®+À OÞdJ½Î®'¾’„åAéɱ.-\ÜFTó峈æ&²qyâ"Øá.`ÔÔŽ©Êöż\ÛÁúQÚÛÒ¼âè@’Â<;°JwKÎW% Úê.šHÁÇ H,§{ÅøH8ÝQA„ý’* i@Šô–ä4}¬b!ÛÌ6I"Qi%¸Í3˜ý¢o·ìº'Œ.|õñÈ8R·4öòàÕFjâ3 îí7åÐD\v²Z­*†©t{¢xуbˆ©”0¬áã'24bFDZªt,;7;ÆÍ‚æ#“1‰ú:ÍcáU"YéïzÍVúîö=zêÉ2”Þaõ²¹Ã’pbK‹Ññ³Yq7³óœ4§Z+” Æù7ë§±x­ y“G­–NÍ#%{í³¸2‰E1“O:9n¸Á ÉÐý>ìÈ4±jJÑK¬C!‡†¡«bÒ²ãQÓÄð—ÐÈÉ8 ä;`‚øÁ`ýŠ>bî;½Ùoj!å’ñú?W©Á@zƃ“›>¯ÂÕGN¬Õ¦ëÓ˲AóbRoÂÎÀ0N¡³Òà¦DRœ§PsÔ—«óÃqÝû„²qwí$Ÿ­ q7‹$¯Z2åÀÔ~†83 ŽÓÏT³5ª£ðþBÐ3–¿ó;„»å«ƒ,WypqЦÕÌέ¥ø:}÷Ч „Ðl#äo„”~è­ wïkmÙ¦FDÄDÈ—ËÐ*óJåžæ@’*‡”œ›…Ií•$üõM6³þýµ?!äg^çSQgA¥s àŒ1YBtŒVÚï}e, Í=´C>}Ù©ç&S™…RÚé.šæ*ÝdŸo¿8zMÝÓÈ¢µ`Lo+:vY–¨!?mzôBéLaWÕUò¤wL,¥UÇ~ì1!â³¹£ a^6'DÙÁ6=zðú™ÕQÚY¹…ŽïP³U0kY¾ñó±ô%2I`»VèÏ” éD„—×jkú´‡‰"±lUjIûú4·FIªª³¸â¶T»´ù3s¹kü¢KÉhÙÚ¶„±äŸÆ6#’3‡H/™,f't5¡Ä~C¦SËÿ Eúò)?ÿä™m×°òîi')É*Štͼ(baM´9/ ßÉÕ¥"Ú,F’ƒjÁÝݲ´Ü¸Ë——èaÿå3:Àæ|Ø%Ú—/×]füPÔ‚íKz ‰#q'JD®{PÖ¡Ïi|ý}ÚO´xTÁ–¿m‰éž)×K/à™åÖ!Ñ”õhú-MUîg÷§B©ƒ…[w´@¨2/bÌÆQZ}õ¬„·2ŽhM|PÍôF¡‹rž©8‘WÿY ò˜Ñ7ÂÑ…#¦ñUD#/RÂVÈ®U–¦Š ­àÊ¥máŸZü¦n-ìc5Sø÷ËCŸ)£nÿ¹ ^L%ÜJGo–î7c&[ìǧŒ‡@Ò{ní`”ò¶/nKk›ñÁ .!óV‹KôA&}j"–XÒáÐM®øñ¥Ísž¤d^0 0ùl.&Õ‹ƒÏ™uG£fÏ”«FÑUŽ%´Qä¾ËP9ÏÊÑJ<ž¸á1ûà{ºñ-Þs¥Z,$·±eU7Åû*ƒ¿·i”&9h51¶8œ£áÔ̦ §Ø"í[->ñóÒ1_`©R¯tùœUÛÓ}tyo6oˆ¥ùít9»Ÿ Gº«9EqýÆ)ócìÆë×I»ÇŸ…O(š#«dŒ¾Šµ¤†bº¢Ö×íƽemÎ./tIK%F>;¦)¼Ä¢¡ó8›+C‘†§nò(I†Ñë¥Ïwàçm$e²ëM6ûÜYøÔG[i‹Uiÿ¡ÝIÎw·Teêb¾Îƨ%pö‡Ž0™J‡FeR:ÕÕììiD n{r/‰ŠbpG:eµ¨ŸFZC‚ë3ì8«bŠdºŠ$ÃÉ/«Å/…Çyþrщ<¨ûQÔ~º,ý BuS‚#¸äU|.È Â³6z,á']n¤àðU¬Iú¨«¯7† ™W+NmMF¢?[FâÙ‰AUÍ$Œ`±ù5ˆ iH¶Ú”þÿ¦©àYÎ\Å9g×ùÁ¼xuÀ,+LòÑ ÇnÉGÖ¶#ê hA³É{:óo"î“™Ö ‘[sèÖ)†}èè×¹jV¼*]Ó´ÁZe9bn ³ÂLO-[äÝÇÒ:nÔ-]i—ÃÒ ºÂ¥ú˜vãOb)„¤@‡úÅ}#ïÅ1Q(ø°†êfº‡ [HlJ¾Y=4Ê^œqI«?ûYé>j¢w”¸³7®±ZÕÃçÊ2‡ìñ mAZwÓ_ÑÕ#çO|Dö¶-O=žƒ¸[ÐÇG²jcîÛÕ",@‘*!¿9Ùy<‹•nyg«°²H¦8躖鵊ð(w¨2Ó‚ŠNÄ>º¬ãëæËŸ&þ88[˪'qÉÏŒ*žà0²™æ¡gî<˜üþÉà-Ëi)£¾Bù ä:}9R–¶"o&?‹‘—™M¯ ?¬~<í›H¹ž7Ù)ùcˆßbõ –@ðM”²ž*bƒ…z„X„K¸8RUÑaz·~æ¯0ÐJèÙ¶:Ð…ÉVqùˆg*cÍEØÁýÃKE¥^z—܈¤[ÎémÄבq”dðÛUpëc•BƒXÑp|[BÚUù“Âö’ˆu9ÜÛ©{ÌDC]ÌV% ²—RþLÜjE æOu•j< Ë쵃M šˆU¨áûŽã …¦5(ód·øõ“ÖŠ°”LöU ÓŸ~ݳ¦n}ïiå¯Ñ×Ïg@y¼®˜Zºo4Õã²]]Ð ÛÛÏɉ箽ôo_drw´'ßbˆ Fèb7äe¾Öi–®åâµ¹×^‘Îq‡6‚4SÔãÙIko5A^Ì= GŠÃI.ÎegÓÂvçðQ½ ÒF 7™º¦R„+}³[åEñIhD¬ðä{z¯dˆM‚$rÚRšwÄYß–aî½} QdûE¿Õ‡±ƒƒ_ ÕÌOåGlg®p]ãÔO¢~Ò%`ÖÙ~ç³}{>"¿“‹QñÂ=ü€öE[zc·9iô8:~ÒãüÌÏwLc-V|2PДÅfß(—Ñ’.|Ñ_îF‚¡Y¾ÇÓí,°8£ÿå$Wóâû!:Ò_c2ÎV̯þ> =N´FøŒðM€˜y‹Í±?Ïn8þanÆ)Åÿ¢xÌA^tÕØçŠ­L˜æûÕ›­ Úðùož2„Y “ok WˆÍ¶ލ€Ð–(•ׯPã»K,IÏ_a ?µB>™j¢é”ë®^V€­«kÌVú˜qýQ6µéÑ;Öm¼ýØþ¶OT@íQ º?EÒÂ­ÑÆå… s×Û2ôÑÝ0ã2ŽgŒþ¸h¦½L0º˜ê¯/×9à& P‘‚·KVó>¤ŠËFœú ÍE‹UA„`yÞšEST?œµhpxÏZÅ:9ÑoÎÖæ8-ÔvÁäF‘‹D [»ªŽ”ã‹­ÓØà`;»YÕfçD'–ûz,ñfÎ5iD#³ $ú°] ÁÜo9ž˜&\Q§WÁEèØ+m1Íû™©ÒùÚ”U{9÷’ƒ¹ J§~QÝL`f4ú­C'h ¿Ì5 ©¿Æa”øPã#÷XŽÎ©0…Q  Þ«¤Ú›xcûô»¤ÄõæÚ¼ ŠìM——f”)þD§aËn8ʬ0^¼ ß[–ÂÖ‹= Ûy-¦³–áDÕÏÍv«gÙãºàûÔËý˜9xåVXÉe¯1P›!ÁÒ•âÎýµ—5¶ÜTÇq;û¥³ÔÁç£Ì”öòi,(íÇÅЧ,*@º—9ûä§%|BòF¦?Ô|‹¡v“e>m­î¯ÞZ !½¿œ¨×ºP‡ÚÒîþ[Ÿ"0¦Nß;9Û ‰Ÿ6õ~þ¶Lò'û1;ÿÕ¸ïë4±mJ†…Rõ²7VôÝéÁ êØ¨“]Y9F.S[Ê0N3ÆzGñWTlSµ]“_ˆéÄ«{êG‚Y{ö‚ãI9E¬öÔ*O"·ŸxMVó5¸Ê£oÈ¿M/¤®QìFá ©6 ŸÌ¯³Á^pº¨á³óGüB?¨¡yêêÇ×c„‚ZÔ,"ON·¨ÿ-®¥ö8N¿áÑÆ‚™ÞX×îE#üý3%‹{§Ù ïº4{zø#žS*Ž(˳“áG®/Tˆì8]"G†6q,5=“kjHþ£µŠÐˆ »'kš_Úx—~QW[J° 7ÆÍ\èÚ¥û“irê—Ÿ~«ÚŸ\Jš!™‡yS8Q±½ÅÑß#8S¬€ëðq›lóPÊ #þ“4º»kÙ5âñÓ`ÎÓ°åÛÔБY ¢žfªN5‡÷Ëa±¡®mJ`ýêî6І‡p ÇžÂBCû@AzÖr%ˆ÷²ݎæ+Ã6W W88þ-Ý,Úö=å7A"ß6éu4½Ä[7 L/{ªÛ΂đù §r’&›väm‡×î˜b˜tþƒX’ÄAœ³!u–“Œ@“è[ ¾æoÇDÑ œ¶f§X?=¤I_ïÔZúQ»Sù}R…O“žJ:óˆ/ ^×Þ8éø°ÅÙ|ú6¸qÙ­F6rþ Î^[¹‘I‰^@^ÕXî//–=JáV’<“ëS™¸}¶~T“>Éÿý-é·¤W/q†M½X¦éãÁÖùù7±x¢p\­Î²”2”ˆúÔ÷âì?¼Š¨ìý`~<Ýý=æ’2Þiëá™õ€:J%ïÈ‹%g!±Ø!÷!…s©¢n¡-¢û%ŽcÎâD.!ã—oê WeåR°õ.ׯéÏùµõäð$Ä_¸œÖÏ;19$¹°¯¯‰`ËÛengYÒµÙ Ì•Sb0ìÇKQ$ꟗ¸D©²‚zé:'©E/H:gÇt#TS…tm“¦* îU…ê—×&ˆî”ÙFÆ—j좜­ÉÿÚ^˜C¬å¤ü…ÀæÃÑ¿üÁÕÿŸßxÄ»âJ,¥Ðd÷ô!ƒ¥úHƒc3-u@!‹#•!Õ³4ò&²X­¯“²d¾±“‡ ´Á'4€Á6z9,žDê5° Ķ˜lY8Xõºh­-*†üM!Æé»%+„œöLn<ü¼³‰§²YàËujs%;e¾ô•èæ±Rë*½+ÛÒ Ù¸Ô0ì¨9á²G‹|@6ä<”C×ú$Ì¡8æv’¿çy'‰Lj»+ÙgŸ7] 5r15„z<ðòBÝ¡ ü©ë›MÚï(ìÂŰ¸Š¢Ê(ù k:ê‚8³—Øìˈ"õ’}«¯@»~ÀÙÁË “ùÍQ¿†‚ئ¤Û†øÔCã€ù¶¸q¸N£ ö’Õu–zµ¹„¹ ;‰$•“ýêåfŒÄÓ¤æèhìvò*¸ï¾Nh@m°!A´ÌjöÜÅ¿æ%’ïw‚ÈHŸ`¡ïƒ ˜S¨Q]{Ëu¥,¶dü€bxÉÖÑù†ÆÞÚ#®kTbÔ «‰5z9V€ ð(.¬jQ懴[ûU|D4U¤ IiF©È³QiúåšçÚ¬ƒ‚üœ52w!¢Šl(>bÏ¢ Gçö€fú’[Ârt¦¹­a?9´ýv@‡]}/àËœ˜#"é l8=Ùþ•öàÀ8iñSðÂÁ1õ ¢æ6±RŸçÒJ¶r‡¥b+yO¾§?S?Uð¾ '2}å2]–Žêku`®ÒÏü>6Xäú‚úR`ý W§µ@ Þm6{ͳÔV[Ô]×n… ¨ËÀñžæŠ'ê|^^²¡nË?Ù¾.[Æ<¼út^y¦dh”`&5Îîˆ×|Ï^í וL57mÉìÿ#£ SEeÓRª§Ø(âR¡½&ìQúyjlð° KßÖh0ºz Žyé3WHlSê$e½TÑ>ù/¬E«Ñ<Ô>ˆKÄUÌ“rÎ¥õj*J-¦šVá8 Æä¤`XQã¹µðvìÓÅ endstream endobj 393 0 obj << /Type /ObjStm /N 100 /First 913 /Length 4089 /Filter /FlateDecode >> stream xÚí[ksÛ6Öþ®_»“1qˆ™ÎÎ$NØÇvÛäƒb3¶ÞÊ’+ÉÝfý>¼¤.‘­gvß6•’ÎyÎý–v† ¦eR+Skç™ÇœY•ã˜s˜çóó¼dA“Âb×LÊÜõ´7ØIb‰Ç–Æ`ž®x&½¤]r&s#1L,Õ¹`J Ì%SJ S´½Î5SV˜žÎ xÓ4Ç2åÍ·AКö š˜T!0p¡µ¡)˜O tÛô">ïDO‡È$Vb„5b3#3J) $Xj„fÆÇaVšc!#IW³ÞÓÀc«žÁm' K#H~àɾ—Êb Á[NͼØ^Z– 0ð,W–n–[‰UJ²Ü+ÜRšåA…žÁAB4Fy<‚;¨B@1FKŒí ‘@= `4´!¼qA "@òb–RÜ….$t°+”¼CµÊèÖ*pDÚ#35éh„ÿ¤(µ±ºÁm¡%G˜!P u‘`>¤ ]`=ˆ]‚kK"K”%¤#%ƒä¤ñçŽæçPÅ2%ñc%fA ÒjØ-ô%­¡ 9lP=刪‹v@óÉl¡9VC×Ή˜P/™2”%,ð°«#(Vëˆ ã!$NÓ³4™4fh2e´µ³9™ ÎSÑ€lŠ&皢É9üKÑä€ @#½ˆ¥³½Ÿ~êñóowãOG£ñ¬ÇÏî¿Ìâù«Áè·6ž\“O^+>ó—üï’ñ¤ÇO‹Ëû$ÎHÒÚÊÌGqdAO«Ì[‹iOÙO?1~Æø‹ñù˜ñçìowýë"“âïìÿèáÿð`C$ùžÏ4éÅ«,‡]k2%Üj&Ô.™0yje2ƒ5d‚„¶™³kxÈwÇ‚r>°l-E¦Å-“ ]JAÞþQx€‡g^ç•.£ „Ì$¢ƒyfm¾š³C9èÉ áAªLP$þv‡<(ŸY„&•ëL"ì(Ø@‚^èø8öPóàB)š‡\Â.V³vÈâGØRäˆNÈ©L¦äã²`T†°=gÁšL»Çáù"S(DåM@—•ÊD)µ&Dê !R´’Š8 q< >GTò1"¤@Ô Ð Ê,‰ˆ!ÍãØ‚AD¤ê1Ï3M@ÖBªVBdȧ y’´§Ä@Kb-á2'×%LµCr… Ž n€²Øf±*÷HænMdf—LäÈJ2J€ ² ª$$²v0ë$±Ó0M`¨øÌ,ÿÚd¹¢*Ó¡”pT¿T9Ò€ZHŽJ Ç@ _Ãß(ª3ä*ÌP_”P蚘C„@q¾†‡º†‘&Ö N _êPÏ F}œåV?’ …È€ž*dÔM˜'Ò³AdÚÈÇñZ¹K ’5• NqÈUx”F#=Q˜¶Z!TR% M³(øÑr¯‘ƒÜ¡ÐFähr­Ì!´¿šJ±*dh¢7eâ9à"sÊøûÑ g=*ÚgìÎF÷Ãáç•S]œê@0 ”nÍ=f‘üœ1<.:ÔéZY¡G­QÝ¡ÖK–›c ~2_ž€ÉøÉóÆÏ‹?g,îþÉ{Ÿ¡\ˆßåíÿÂh“o´é".ÙnٛƯåWkzó+Éäù¹“hªï¥S=׉3É>÷>Y„¤†Oñ]4}ãÌ ïaûëû¿ä›4–˜Ê&µÌ+þÒüÿKÛqˆ¬ôñJÅO<§çœh³èœÚ-#ÖXÇr­Ë¹¸×UóšuÕ˜ÓÕ{ÓõضUz˜B{ÑCZ:ÆÙf5Ž4ë1ñ@óÈnq$úÍšêC4K»Žë(®ýO¡±¨ªAã¯ï¿¾¿ÿ}ºômÖ޸зMŠú†•eº?4w¤„:U}WÅŒEªŸ¼ˆ®: >\.2´"VÑŒÜ Ñ¢tÄøªîÑ{ºBsÄŠt_Òk1[Žé]R-¸j’ýk7' õ|:Ö!j3e”!ˆö¨?ÄgPóÐUwÂ@xëÐyÈCs/¯Æ¾ cõzס>ñýK^q½–IÄëJC‹cßµµŽ æ”÷jì—à®yLeâ«ðYïI¯q´F&š¨g´Jé¨"Q…g:!Ü©ãžÄ«MjïøÒŒÞ?Æ7’eΠÉå1…ÕÀKèyGÕUªtç탕^ïC{ÔºTi¨ñ“(=U^­˜4ÿ¥sC©ÔGå MŽª”BGS)$•Bªô[“3«ë©2|$ãDé5¿bˆfÜËÆã¢Ò#²<,Ñy­JcZ:o`U:ÇâeÇ%ÂÓ5ƒ›Dˆ(„Jù`í./OÂCƒÇ‹¶Ú£ùµhѸøÒj©Òn™7ò¦ jª¥¤ªŠ!"Ù§ì<“MÓasÙ6ëJs©ŽéõfM5nÊ¥¤¼ªMB'÷:1â{aÇÐR¶šVáW;N}¬³MZH6¤qâêÕ0_÷9y DNžÓËÉàn6ž”R^÷oqçãÉ‹‹ý—Oö~/n û×SfÊÏžÿdŸö”a{*¸øúŠõññäô²ÍàW=¾ß¿{Y ®of 'D„nì9³ÃY8¸|:ºtólVÜ^ ÷÷øûj…ÑÜô'ô\æoü®?)FÃâëìËàúº<›Ð<:ý{ÉÓÁ{Iáô´ýÐk5Æã£—/NñøpF­€1&–sˆ.˜£Ëu‚RÒÍåž45N¯Vâ¼ßÞöù]1Œ¯øtØŸÞðÙdЧ"Þ6V³ Ö³7gç§oõtT#j¨"üÔF¡.¬úeÒ¿ü­˜‘JëqÈ‹ßïûù¾]ó»áý´-·Ï^]ürœ}XiÐíE{–’ÊD;—Äñ0e“#¬A1,n±žßF]`ù6Àžî?}÷îÉñÙ³ãUÀ$ö Ò»ÒFSžOÕuTæÀV:jŠÉéÓÇ%¶RÐÅÑÑáû'ggçR»‰DÛÓ¤#zëÔJ¥lA¡ÓFGh–;: 5ÛR‘Há¼à/ùkÞç_*Ï,øW~Íü7>ä·|<*ø]ã­|öÏqýV±èôÍ/G§OþüœÒß E?P¡÷è󇢀ʟñ}þœÿÌ¢ ùÿ…¿âÇÉ~ÂßòS~Æåü#DÔŸ^—ƒÉåým9ž †Wïÿù8xÍVúý%$<*9_AÒE¾ò¯ƒ? üñýò¿žýY1á7üæÛÝM1‚Bþ/ªdXL§ÐˈPÍèþöK1™®G|\ëji\)ø;ÿý~<+®¾ ùÚœ·ƒ’¥iñhLÖ™Ïn&EAúæ÷ü~t"—ãIÁÿàÿäòoü_ü_Ťc [ÅêãÃwÇo?T¶°Ê”0d ôâÖþ'lb ©%&6Z@ªçEu’ã$ +=hSÍD…ÔÂb_'ë­ÒÂþùÑÛ“¥¬Õj¿Sµß¡Y¨^ýý§dÝH±j«œðòíÅÁ›£'¯·_î§gýÑ«½gãáÕŠê5ÀÑ;1zíLÎÿspñtNúऑstV«Ý>l£€-ê'ü¾…Qo•/.Þÿzqñ1ÅxZ\߯ÂHµjßbIÊ—ØFÙÆ(Ûõ Œ¹M *Ýœûp““u@·J ÏNŽ_x×J\­›XúËä‹»G·+¸ùJ¸k5ºUÜ;ýøöðãù“³YtÕŸ\}»}µaNµ*ý¹ŽT°Ê$øÑŸ·*ßrÈ|…>Sí" ÖFµU„9zyøüø¸Rßéøöõ8¼Ú;.®+°9Êñ¦z\«oW¡!m¬”+ݱU°Ém’|;À×a½ è_­´|ó°°Ž¼ÚΨkB»Þ*ž¼:zßüšá¢ÛÔ‚W&¼Ï[‚·­ /Ý1ÂX±­ÜÏ£äßñ÷üC,°Pó ¦¿QžÝ¬Šºß}+¯'õ< it^VmVY5EÕ&Š¥F--§â œ±MeµÆÌV‰âàìן_\,±ƒ5!Ô¡T¾Œ-[pm[ Ó¤\¡¶éû“jÌ/|­ ´è?õº¦*¾ú« âÒéHE›:][u51·å»$?ý<º_ F×@;øúµÀÆ—Å”}Rà„iÓh›é*|)/)GK)ÁU×zöAz˜ˆËÒ4¢¡FìÑl¢•–ͳ¶« ʱÊÔ+ˆë~ÏõPÞ-xßÇÔåXÐ-¯cÁWjš×¹©ßŒ¡’2ÖÍR«¦ßµ4îµJ?™;íçÄŸH>ix–JšýOŠ»lÀ:7ÔnÔK"^’ÌYm/öµÍ[Îyö`u(—4®ŸƒKòwstü¬?-âŸ-<-mÅ¢øs/ò'~0˜LgäöL"¼ê×'ÈÜïW³›)£ß¥- më¨wŸcv©Û.uãêTTÔéuÈÖÔ;O»Äýq‘§xÙôîS½.õÐ¥ž§”ÜÈÝ<€øÂ«yµ wcR½Srh¨X­=þok–#uYZ0ÝbI¹D!v,->Íè²´ÞD$u Kr,-6ý]–ì&¨ÔjU¢7· Žºq»üÈ~Z^$ ¹í©¯|\ÐaC/°á|ËžýœÙÕý¸tkÎV6ù]Î<ÍÙUœ ½ ÎÖvå]îìærfÜ-o¥»l-8ž— [^&VžoÏúƷËÉ‚¿©U üÃí•ϺްÛ‘kys!Ñ]¾ ޾ׯtùÓëçMó{Ø„Á“þu1E2¾§~§‡óI|Wd*Óüep…ÒÓÇ½è·æåQWGSmutQ(ŸB‚žóÄ=Jó£ß¨•ÇòÝ S哦ÌÃi([ííËß Ðƒ³x % ]ÖD8†ïÑ0«hè²aºLuH¹%ê'ëö$Ó/7 •¼óòH¿u/÷´Köxs?¢BŸVfÁ*vÈ*è×ïñ¤$à›…TÛÌW1á)óÕšRÄN&ÅôÃùÔlÊ¥ºY*Ö,uÕ¾¯égÞ-îãB½s­}œY2Ù6“Õ¢&O‰ªÄc˜ËÙÔ'¥löd‡˜¬‰Ù¼M,OhÙ%˜l#VkÖ¬T —N,Ù¦±K·‰+—1`¡·FNգ͊“Ê©f®”“hÉIwˆ5J1m¥ÔÛ—:YÐ4ÖùÒ•‘1³Ät#a½ÎpekŸ<XñS¬¸¨:Ä=è¶d °óÎ&®T”[³2õ½Ä×T#a¥Öl#’m–rÓˆ[æK·)W.·lÄ-׉»…Ã¥ÒV©´+ˆµ´ Ñú7FüØW endstream endobj 477 0 obj << /Producer (pdfTeX-1.40.21) /Author(Ann Dooms ; Eric Jespers ; Olexandr Konovalov ; Helena Verrill)/Title(Congruence)/Subject()/Creator(LaTeX with hyperref package / GAPDoc)/Keywords() /CreationDate (D:20230225110824Z) /ModDate (D:20230225110824Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2) >> endobj 446 0 obj << /Type /ObjStm /N 33 /First 282 /Length 1824 /Filter /FlateDecode >> stream xÚ•XQoä¸ ~ϯðãå€M$‘%àp€-[(pé^ÑnÅ=L÷ŒÜà²É"™-Ú_ÒöÌhleÚ>ì΄ŸH}IÑ[ט&4äl¬µ "7Π|†ÁÉgl|;™&‚‘O+ë8Ê×Xt²Š ±žùIBD'‘ˆg™ä‹oDµHT’ÿBãÔ+6.D ìMA¾ØlÈ»@yh€€nÐcì$ §¢PA/ð´…— hÔ2yªEÈ]Ãò/FѶ!«kØ54©chŒDflÄX„ÓbßYºùᇛûOûÃÓØXýùæ¾m¬™¿ýi÷:>$eó_¯ã?%‡úýÇ ¿xtó5¯ã¿u[7:ívé†T:.1óþõí°l~ÿ°{;…¼O/ßÄëƒ;ÿ¸û2¾5ÿ®ùüá/‡ÝëᶉÓÍwwãÀ»>skûÛáVŠÂg4ê ™`Ì€h½ – 4 9‚Gƒ˜HÑÒ7µR) 6k(ßJ'¸3Úð)@ë‚Ïâëfi¿ˆœý—ýaE¹êóËZã´ÈÛì#†Ì„²õ¦ØÖçr(×e•‹åÎX3 žs›2’ –BZê0R€>Åa¢ ±@1wCoyHƒkYäÚ€Ê]°L©“Ä×ÃZn•}Õ»*¼ }Ǻ°“•= †‚@&î-qp˜s BÀääÔ÷Cˆ‡^ɵí9xg˜QëìŠJ¦Ü'9aÛd†@êëÏhO>J­F6½³º¯¯ ß°¯zW…÷ Ö€ÔS ÚJù¾#ï{N|OZÓ¢úÜyh#KÑ“i…žÅÂ7#ô]è‚ ´…c!-stAQ¤ZÚþEÂsÈm lZôÚiÎSMø†}Õ»*<'’²JæÁæŒÚTXÒD`Ù@{¹Ôœ«ŒõI†{pí8  ì ´dØ÷ÁÇn¢Ñ©¨œÃ\Â>vÚê ´ë(h³F׋2kÂ7ì«Þ5áAih%gFf‹Ž%w>kÁ¢oS ÀÉS?hæñ<ð¤ÿ‰½ÒêÆ1iC2¨×— ¼ é{í¥ ”³ó6°Œ8è(ÓâBæÁH Ù“éµ+·ì«ÞUá.‘oÁs+îËçf`“QÒ˜½äÑi»RÊø$Ÿ¥)’*ÇEÒ smð†“d‡ ‘¡DqÀ,c åÀDÖ´‡Ñä%‚‘nqkÂ7ì«ÞUáH9v­ .ãÀ ÍÌ…4²[©é j;mfS¢Cô©Or&´¦1hj»¤!õ1N“¹èï%°Œ5¦¡•fÒñU$Ü÷)‚LP§ÇlMø†}Õ»*œÁ¸Z–çoïY…»‚<#³7(]Ó¥µâ¡ /ï$GSšŒ[ˆ­žâ"-ÜÉl‹·­d¥Õ´àÒŸÛ}=Œ¯ßßI&-„•QÚž«*7TKŸ¸»“;Ü9Ñ—&®+“p;>º&aæ±ö‡ñ.=|ÒPnM¶Øú¼pKP‘Ÿ¾=ý¾{}Þkœ2ôÃçíÓãËëþðÛíüÃøù÷Q%§_w£nMù·žw±BÒœò Æ—\Nk7¤g@.6Ò1ì/,ÓȇҢóìøèž-^ÏÊ=Ö&Ú$ô´ëiÕ;Ät®X[Œ:¼K‹Vÿx z®Ž—•Ù¢=ƒ%S'^ßánÏ«ê¼@û¼ÜSKƒ^k¨4èÅ’Ë„ê…+¸Â cª”àö´¦N(ê„]þmü|Ø¿<¯ÝcM\5]ÇŒžŒªÇº•QóeÈ;«1¹JQ\,Ûð<ƒ…ËÀn"×FíKX§ÂÚˆÚ(—F˜FÅæ*qÁãbñ»”A—âŠjx²k£¬$Z…2­Ä‘ºû£Žoÿ(21å‚Þ%3ñµË–ýå Í:»ê~ZþUH;Pšnîu:Œ­@sysÍÙrÝú]èfTÝTé R±NUFW…&¾MMç]è¶á¿ œÊîW7Õ3ajÐÔ¥MÒ€èªDªBú {U`¥EÕïº@Ô„;Úö!ÌGÂy¬Bª‚k›½¸ M^¡ ©ö`® œ¸ný® „¹ÙœßnŠ‹ÀÈhR«>Æ*}ˆ³ °® MÃòÚ\¸ný® ÄùÈ€­ñ™‡±Û—fíî Ÿ%ôÖïÄç§ý¯âƒË3—å¸üÎÄårƒË¼ÆíoõîèýŸWËNKŸâò›—¡¯¯2çÏ… …ÿí—Íæ"tÜgQ°\Æpù±¡/?çÏ…‡Ç÷/3ïÒe¿÷ ùåÌàÒ«úªôÿšgõâ,×äEÂò4B†kÅx?l?¾ÉjœÏþéÝè¿¿ŽÍ}ÚvO/úRôQúqy™úó·ÃÓþy²ß’NŒLÇ—¨ã_~ïÿú6~|yÅåëøÜNû7|zyûÚ©b endstream endobj 478 0 obj << /Type /XRef /Index [0 479] /Size 479 /W [1 3 1] /Root 476 0 R /Info 477 0 R /ID [<305B85B18E4A33DE27A2FC0EAAB1AA9F> <305B85B18E4A33DE27A2FC0EAAB1AA9F>] /Length 1129 /Filter /FlateDecode >> stream xÚ•ËoÖE†çü¾ÒRè J½pm ½½·”B[ ´¥@[ ¥\KXéJc4qáea2š˜¸ 1$ge\ãztÉÎ`âÒ…F—.üŒ~Ï»yrÎùfæ›ß¼ïœ !„ÿŠŠ`¡ýÃ@´S‰sAd@ÑjJK  <¢¦{@uÎ:é)i ØK­ ¶KZ öQ;Ní é~PGmœÚcÒzÐ@m‰Ú#ÒFÐD½¤‡¤ÀAjì%= m‡*iÜCí>i 8Lí(µÒ#€4Fj÷H[ip„÷2ˆ³zÀCŽ¥¼ÕÂèïZÛzÀ¬Ž;;:þsáÈèXϱžc=Çz> º-Ìþ¨¥p¢cB#79Fr,àS¾Ó`Lã3‡ù,ÐáàÇ%ŽK¹}}ø¼…•>­‚‡û8öqìãËœ†~ÀCއ9fðÖÿÖ\<ä\5Ç4ŽiÓ8ÞpúKóm ;Uš_ü!ËëchKޝ|—šÌ_š€zPé¢oþJŒt½XØ'Vƒ½oÄ}`?¨³ÊiÆAÐ`áí-¥àP7kêaj<ÍÞmÒ8[Á1 VÕºA§…¾Ñ8õ&5£S€Ï€.0z,|:§ÁgÁ9Ð ú@?ƒ` [øbQ3Ê`Œ5ó[DtŸ8iá«4Ž^ÕAfÁÀÝŠÜ­HƒŠºœ—M+ÒÒâUp  y\—,¼Ò¢4¼HË›à6¸î‚-° îÞ·xð’DD޼‘ΟDŽOù=hè›ôŒ!hR?Ð낪 $¤MºöH›6Õl‘‚&ü’P5!wjè›Ð7¡oÒ×C%A7,|ý›¶Ñj¥÷ÿT„ȉóK(pDêzWõx¡tÒS„ÜI/r'äNx#õ”N(z-|û±–ï³ðê…¢~ µ)0+ÞR4hÖ1¥hȬëEÃfoü¡¨lEñƒ¢+>‘•Ó¨Ï_+³âåKEãV|_V4aÅO?+š´âÕ’¢)+•ÞQ4m¥ÕÏaš„ðiÃJŸé–eôÈè‘Ñ#£GFŒ=2zdôÈè‘Ñ#£GFŒ=2zdôÈè‘Ñ#£GFŒ™[–y¶3ÊdTÈ #@>n¥çkÁJ_> ÿ.¿º endstream endobj startxref 234853 %%EOF congruence-1.2.5/doc/times.css000644 000766 000024 00000000261 14376366051 016261 0ustar00obk1staff000000 000000 /* times.css Frank Lübeck */ /* Change default CSS to use Times font. */ body { font-family: Times,Times New Roman,serif; } congruence-1.2.5/doc/manual.toc000644 000766 000024 00000014034 14376366051 016415 0ustar00obk1staff000000 000000 \contentsline {chapter}{\numberline {1}\textcolor {Chapter }{Introduction}}{4}{chapter.1}% \contentsline {section}{\numberline {1.1}\textcolor {Chapter }{General aims of \textsf {Congruence} package}}{4}{section.1.1}% \contentsline {section}{\numberline {1.2}\textcolor {Chapter }{Installation and system requirements}}{4}{section.1.2}% \contentsline {chapter}{\numberline {2}\textcolor {Chapter }{Construction of congruence subgroups}}{5}{chapter.2}% \contentsline {section}{\numberline {2.1}\textcolor {Chapter }{Construction of congruence subgroups}}{5}{section.2.1}% \contentsline {subsection}{\numberline {2.1.1}\textcolor {Chapter }{PrincipalCongruenceSubgroup}}{5}{subsection.2.1.1}% \contentsline {subsection}{\numberline {2.1.2}\textcolor {Chapter }{CongruenceSubgroupGamma0}}{6}{subsection.2.1.2}% \contentsline {subsection}{\numberline {2.1.3}\textcolor {Chapter }{CongruenceSubgroupGammaUpper0}}{7}{subsection.2.1.3}% \contentsline {subsection}{\numberline {2.1.4}\textcolor {Chapter }{CongruenceSubgroupGamma1}}{7}{subsection.2.1.4}% \contentsline {subsection}{\numberline {2.1.5}\textcolor {Chapter }{CongruenceSubgroupGammaUpper1}}{7}{subsection.2.1.5}% \contentsline {subsection}{\numberline {2.1.6}\textcolor {Chapter }{IntersectionOfCongruenceSubgroups}}{8}{subsection.2.1.6}% \contentsline {section}{\numberline {2.2}\textcolor {Chapter }{Properties of congruence subgroups}}{8}{section.2.2}% \contentsline {subsection}{\numberline {2.2.1}\textcolor {Chapter }{IsPrincipalCongruenceSubgroup}}{8}{subsection.2.2.1}% \contentsline {subsection}{\numberline {2.2.2}\textcolor {Chapter }{IsCongruenceSubgroupGamma0}}{8}{subsection.2.2.2}% \contentsline {subsection}{\numberline {2.2.3}\textcolor {Chapter }{IsCongruenceSubgroupGammaUpper0}}{9}{subsection.2.2.3}% \contentsline {subsection}{\numberline {2.2.4}\textcolor {Chapter }{IsCongruenceSubgroupGamma1}}{9}{subsection.2.2.4}% \contentsline {subsection}{\numberline {2.2.5}\textcolor {Chapter }{IsCongruenceSubgroupGammaUpper1}}{9}{subsection.2.2.5}% \contentsline {subsection}{\numberline {2.2.6}\textcolor {Chapter }{IsIntersectionOfCongruenceSubgroups}}{9}{subsection.2.2.6}% \contentsline {section}{\numberline {2.3}\textcolor {Chapter }{Attributes of congruence subgroups}}{9}{section.2.3}% \contentsline {subsection}{\numberline {2.3.1}\textcolor {Chapter }{LevelOfCongruenceSubgroup}}{10}{subsection.2.3.1}% \contentsline {subsection}{\numberline {2.3.2}\textcolor {Chapter }{IndexInSL2Z}}{10}{subsection.2.3.2}% \contentsline {subsection}{\numberline {2.3.3}\textcolor {Chapter }{DefiningCongruenceSubgroups}}{10}{subsection.2.3.3}% \contentsline {section}{\numberline {2.4}\textcolor {Chapter }{Operations for congruence subgroups}}{11}{section.2.4}% \contentsline {subsection}{\numberline {2.4.1}\textcolor {Chapter }{Random (one and two argument versions)}}{11}{subsection.2.4.1}% \contentsline {subsection}{\numberline {2.4.2}\textcolor {Chapter }{\texttt {\symbol {92}}in}}{11}{subsection.2.4.2}% \contentsline {subsection}{\numberline {2.4.3}\textcolor {Chapter }{CanEasilyCompareCongruenceSubgroups}}{11}{subsection.2.4.3}% \contentsline {subsection}{\numberline {2.4.4}\textcolor {Chapter }{IsSubset}}{12}{subsection.2.4.4}% \contentsline {subsection}{\numberline {2.4.5}\textcolor {Chapter }{Index}}{12}{subsection.2.4.5}% \contentsline {chapter}{\numberline {3}\textcolor {Chapter }{Farey symbols and their properties}}{13}{chapter.3}% \contentsline {section}{\numberline {3.1}\textcolor {Chapter }{Construction of Farey symbols}}{13}{section.3.1}% \contentsline {subsection}{\numberline {3.1.1}\textcolor {Chapter }{FareySymbolByData}}{13}{subsection.3.1.1}% \contentsline {subsection}{\numberline {3.1.2}\textcolor {Chapter }{IsValidFareySymbol}}{14}{subsection.3.1.2}% \contentsline {section}{\numberline {3.2}\textcolor {Chapter }{Properties of Farey symbols}}{14}{section.3.2}% \contentsline {subsection}{\numberline {3.2.1}\textcolor {Chapter }{GeneralizedFareySequence}}{14}{subsection.3.2.1}% \contentsline {subsection}{\numberline {3.2.2}\textcolor {Chapter }{NumeratorOfGFSElement}}{14}{subsection.3.2.2}% \contentsline {subsection}{\numberline {3.2.3}\textcolor {Chapter }{DenominatorOfGFSElement}}{14}{subsection.3.2.3}% \contentsline {subsection}{\numberline {3.2.4}\textcolor {Chapter }{LabelsOfFareySymbol}}{15}{subsection.3.2.4}% \contentsline {chapter}{\numberline {4}\textcolor {Chapter }{Farey symbols for congruence subgroups}}{16}{chapter.4}% \contentsline {section}{\numberline {4.1}\textcolor {Chapter }{Computation of the Farey symbol for a finite index subgroup}}{16}{section.4.1}% \contentsline {subsection}{\numberline {4.1.1}\textcolor {Chapter }{FareySymbol}}{16}{subsection.4.1.1}% \contentsline {section}{\numberline {4.2}\textcolor {Chapter }{Computation of generators of a finite index subgroup from its Farey symbol}}{17}{section.4.2}% \contentsline {subsection}{\numberline {4.2.1}\textcolor {Chapter }{MatrixByEvenInterval}}{17}{subsection.4.2.1}% \contentsline {subsection}{\numberline {4.2.2}\textcolor {Chapter }{MatrixByOddInterval}}{17}{subsection.4.2.2}% \contentsline {subsection}{\numberline {4.2.3}\textcolor {Chapter }{MatrixByFreePairOfIntervals}}{18}{subsection.4.2.3}% \contentsline {subsection}{\numberline {4.2.4}\textcolor {Chapter }{GeneratorsByFareySymbol}}{18}{subsection.4.2.4}% \contentsline {subsection}{\numberline {4.2.5}\textcolor {Chapter }{GeneratorsOfGroup}}{18}{subsection.4.2.5}% \contentsline {section}{\numberline {4.3}\textcolor {Chapter }{Other properties derived from Farey symbols}}{19}{section.4.3}% \contentsline {subsection}{\numberline {4.3.1}\textcolor {Chapter }{IndexInPSL2ZByFareySymbol}}{19}{subsection.4.3.1}% \contentsline {chapter}{\numberline {5}\textcolor {Chapter }{Service functions of the \textsf {Congruence} package}}{20}{chapter.5}% \contentsline {section}{\numberline {5.1}\textcolor {Chapter }{Additional information displayed by \textsf {Congruence} algorithms}}{20}{section.5.1}% \contentsline {subsection}{\numberline {5.1.1}\textcolor {Chapter }{InfoCongruence}}{20}{subsection.5.1.1}% \contentsline {chapter}{References}{21}{chapter*.5}% \contentsline {chapter}{Index}{22}{section*.6}% congruence-1.2.5/doc/toggless.css000644 000766 000024 00000001672 14376366051 016776 0ustar00obk1staff000000 000000 /* toggless.css Frank Lübeck */ /* Using javascript we change all div.ContSect to div.ContSectOpen or div.ContSectClosed. This way the config for div.ContSect in manual.css is no longer relevant. Here we add the CSS for the new elements. */ /* This layout is based on an idea by Burkhard Höfling. */ div.ContSectClosed { text-align: left; margin-left: 1em; } div.ContSectOpen { text-align: left; margin-left: 1em; } div.ContSectOpen div.ContSSBlock { display: block; text-align: left; margin-left: 1em; } div.ContSectOpen div.ContSSBlock a { display: block; width: 100%; margin-left: 1em; } span.tocline a:hover { display: inline; background: #eeeeee; } span.ContSS a:hover { display: inline; background: #eeeeee; } span.toctoggle { font-size: 80%; display: inline-block; width: 1.2em; } span.toctoggle:hover { background-color: #aaaaaa; } congruence-1.2.5/doc/chap2.txt000644 000766 000024 00000051216 14376366045 016175 0ustar00obk1staff000000 000000 2 Construction of congruence subgroups The package Congruence provides functions to construct several types of canonical congruence subgroups in SL_2(ℤ), and also intersections of a finite number of such subgroups. They will return a matrix group in the category IsCongruenceSubgroup, which is defined as a subcategory of IsMatrixGroup, and which will have a distinguishing property determining whether it is a congruence subgroup of one of the canonical types, or an intersection of such congruence subgroups (if it can not be reduced to one of the canonical congruence subgroups). To start to work with the package, you need first to load it as follows:  Example   gap> LoadPackage("congruence"); ----------------------------------------------------------------------------- Loading Congruence 1.2.4 (Congruence subgroups of SL(2,Integers)) by Ann Dooms (http://homepages.vub.ac.be/~andooms),  Eric Jespers (http://homepages.vub.ac.be/~efjesper),  Olexandr Konovalov (https://alex-konovalov.github.io/), and  Helena Verrill (http://www.math.lsu.edu/~verrill). maintained by:  Ann Dooms (http://homepages.vub.ac.be/~andooms),  Olexandr Konovalov (https://alex-konovalov.github.io/), and  Helena Verrill (http://www.math.lsu.edu/~verrill). Homepage: https://gap-packages.github.io/congruence Report issues at https://github.com/gap-packages/congruence/issues ----------------------------------------------------------------------------- true   2.1 Construction of congruence subgroups 2.1-1 PrincipalCongruenceSubgroup PrincipalCongruenceSubgroup( N )  operation Returns the principal congruence subgroup Γ(N) of level N in SL_2(ℤ). This subgroup consists of all matrices of the form [1+N*a N*b] [ N*c 1+N*d] where a,b,c,d are integers. The returned group will have the property IsPrincipalCongruenceSubgroup (2.2-1).  Example   gap> G_8:=PrincipalCongruenceSubgroup(8);  gap> IsGroup(G_8); true gap> IsMatrixGroup(G_8); true gap> DimensionOfMatrixGroup(G_8); 2 gap> MultiplicativeNeutralElement(G_8); [ [ 1, 0 ], [ 0, 1 ] ] gap> One(G); [ [ 1, 0 ], [ 0, 1 ] ] gap> [[1,2],[3,4]] in G_8; false gap> [[1,8],[8,65]] in G_8; true gap> SL_2:=SL(2,Integers); SL(2,Integers) gap> IsSubgroup(SL_2,G_8); true   2.1-2 CongruenceSubgroupGamma0 CongruenceSubgroupGamma0( N )  operation Returns the congruence subgroup Γ_0(N) of level N in SL_2(ℤ). This subgroup consists of all matrices of the form [a b] [N*c d] where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGamma0 (2.2-2).  Example   gap> G0_4:=CongruenceSubgroupGamma0(4);    2.1-3 CongruenceSubgroupGammaUpper0 CongruenceSubgroupGammaUpper0( N )  operation Returns the congruence subgroup Γ^0(N) of level N in SL_2(ℤ). This subgroup consists of all matrices of the form [a N*b] [c d] where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper0 (2.2-3).  Example   gap> GU0_2:=CongruenceSubgroupGammaUpper0(2);    2.1-4 CongruenceSubgroupGamma1 CongruenceSubgroupGamma1( N )  operation Returns the congruence subgroup Γ_1(N) of level N in SL_2(ℤ). This subgroup consists of all matrices of the form [1+N*a b] [ N*c 1+N*d] where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGamma1 (2.2-4).  Example   gap> G1_6:=CongruenceSubgroupGamma1(6);    2.1-5 CongruenceSubgroupGammaUpper1 CongruenceSubgroupGammaUpper1( N )  operation Returns the congruence subgroup Γ^1(N) of level N in SL_2(ℤ). This subgroup consists of all matrices of the form [1+N*a N*b] [ c 1+N*d] where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper1 (2.2-5).  Example   gap> GU1_4:=CongruenceSubgroupGammaUpper1(4);    2.1-6 IntersectionOfCongruenceSubgroups IntersectionOfCongruenceSubgroups( G1, G2, ..., GN )  function Intersection( G1, G2, ..., GN )  function Returns the intersection of its arguments, which can be congruence subgroups or their intersections, constructed with the same function. It is not necessary for the user to use IntersectionOfCongruenceSubgroups, since it will be called automatically from Intersection. The returned group will have the property IsIntersectionOfCongruenceSubgroups (2.2-6). The list of congruence subgroups that form the intersection can be obtained using DefiningCongruenceSubgroups (2.3-3). Note, that when the intersection appears to be one of the canonical congruence subgroups, the package will recognize this and will return a canonical subgroup of the appropriate type.  Example   gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);  gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);    2.2 Properties of congruence subgroups A congruence subgroup constructed by one of the five above listed functions will have certain properties determining its type. These properties will be used for method selection by Congruence algorithms. Note that they do not provide an actual test whether a certain matrix group is a congruence subgroup or not. 2.2-1 IsPrincipalCongruenceSubgroup IsPrincipalCongruenceSubgroup( G )  property For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by PrincipalCongruenceSubgroup (2.1-1) (or reduced to one as a result of an intersection) and returns false otherwise.  Example   gap> IsPrincipalCongruenceSubgroup(G_8); true gap> IsPrincipalCongruenceSubgroup(G0_4); false gap> IsPrincipalCongruenceSubgroup(I); true   2.2-2 IsCongruenceSubgroupGamma0 IsCongruenceSubgroupGamma0( G )  property For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGamma0 (2.1-2) (or reduced to one as a result of an intersection) and returns false otherwise. 2.2-3 IsCongruenceSubgroupGammaUpper0 IsCongruenceSubgroupGammaUpper0( G )  property For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGammaUpper0 (2.1-3) (or reduced to one as a result of an intersection) and returns false otherwise. 2.2-4 IsCongruenceSubgroupGamma1 IsCongruenceSubgroupGamma1( G )  property For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGamma1 (2.1-4) (or reduced to one as a result of an intersection) and returns false otherwise. 2.2-5 IsCongruenceSubgroupGammaUpper1 IsCongruenceSubgroupGammaUpper1( G )  property For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by CongruenceSubgroupGammaUpper1 (2.1-5) (or reduced to one as a result of an intersection) and returns false otherwise. 2.2-6 IsIntersectionOfCongruenceSubgroups IsIntersectionOfCongruenceSubgroups( G )  property For a congruence subgroup G in the category IsCongruenceSubgroup, returns true if G was constructed by IntersectionOfCongruenceSubgroups (2.1-6) and without being one of the canonical congruence subgroups, otherwise it returns false.  Example   gap> IsIntersectionOfCongruenceSubgroups(I); false gap> IsIntersectionOfCongruenceSubgroups(J); true   2.3 Attributes of congruence subgroups The next three attributes store key properties of congruence subgroups. 2.3-1 LevelOfCongruenceSubgroup LevelOfCongruenceSubgroup( G )  attribute Stores the level of the congruence subgroup G. The (arithmetic) level of a congruence subgroup G is the smallest positive number N such that G contains the principal congruence subgroup of level N.  Example   gap> LevelOfCongruenceSubgroup(G_8); 8 gap> LevelOfCongruenceSubgroup(G1_6); 6 gap> LevelOfCongruenceSubgroup(I); 4 gap> LevelOfCongruenceSubgroup(J); 12   2.3-2 IndexInSL2Z IndexInSL2Z( G )  attribute Stores the index of the congruence subgroup G in SL_2(ℤ).  Example   gap> IndexInSL2Z(G_8); 384 gap> G_2:=PrincipalCongruenceSubgroup(2);  gap> IndexInSL2Z(G_2); 12 gap> IndexInSL2Z(GU1_4); 12   2.3-3 DefiningCongruenceSubgroups DefiningCongruenceSubgroups( G )  attribute Returns: list of congruence subgroups For an intersection of congruence subgroups, returns the list of congruence subgroups forming this intersection. For a canonical congruence subgroup returns a list of length one containing that subgroup.  Example   gap> DefiningCongruenceSubgroups(J); [ ,  ] gap> P:=PrincipalCongruenceSubgroup(6);  gap> Q:=PrincipalCongruenceSubgroup(10);   gap> G:=IntersectionOfCongruenceSubgroups(Q,P);   gap> DefiningCongruenceSubgroups(G); [ ]    2.4 Operations for congruence subgroups Congruence installs several special methods for operations already available in GAP. 2.4-1 Random Random( G )  operation Random( G, m )  operation For a congruence subgroup G in the category IsCongruenceSubgroup, returns random element. In the two-argument form, the second parameter will control the absolute value of randomly selected entries of the matrix.  Example   gap> Random(G_2) in G_2; true gap> Random(G_8,2) in G_8; true   2.4-2 \in \in( m, G )  operation It is easy to implement the membership test for congruence subgroups and their intersections.  Example   gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2); true gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8); false   2.4-3 CanEasilyCompareCongruenceSubgroups CanEasilyCompareCongruenceSubgroups( G, H )  operation For congruence subgroups G,H in the category IsCongruenceSubgroup, returns true if G and H are of the same type listed in PrincipalCongruenceSubgroup (2.1-1) --> CongruenceSubgroupGammaUpper1 (2.1-5) and have the same LevelOfCongruenceSubgroup (2.3-1) or if G and H are of the type IntersectionOfCongruenceSubgroups (2.1-6) and the groups from DefiningCongruenceSubgroups (2.3-3) are in one to one correspondence, otherwise it returns false.  Example   gap> CanEasilyCompareCongruenceSubgroups(G_8,I); false   2.4-4 IsSubset IsSubset( G, H )  operation Congruence provides methods for IsSubset for congruence subgroups. IsSubset returns true if H is a subset of G. These methods make it possible to use IsSubgroup operation for congruence subgroups.  Example   gap> IsSubset(G_2,G_8); true gap> IsSubset(G_8,G_2); false gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];; gap> g1:=List(f, t -> t(2));; gap> g2:=List(f, t -> t(4));; gap> for g in g2 do > Print( List( g1, x -> IsSubgroup(x,g) ), "\n"); > od; [ true, true, true, true, true ] [ false, true, false, true, false ] [ false, false, true, false, true ] [ false, false, false, true, false ] [ false, false, false, false, true ]   2.4-5 Index Index( G, H )  operation If a congruence subgroup H is a subgroup of a congruence subgroup G, we can easily compute the index of H in G, since we know the index of both subgroups in SL_2(ℤ).  Example   gap> Index(G_2,G_8); 32   congruence-1.2.5/doc/chap3.txt000644 000766 000024 00000013205 14376366045 016172 0ustar00obk1staff000000 000000 3 Farey symbols and their properties A Farey symbol is a compact and useful way to represent a subgroup of finite index in SL_2(ℤ) from which one can deduce independent generators for this subgroup. It consists of two components, namely a so-called generalised Farey sequence (gfs) and an ordered list of labels, giving additional structure to the gfs. A generalised Farey sequence (g.F.S.) is an ordered list of the form -infinity, x_0, x_1, ... , x_n, infinity, where 1. the x_i = a_i/b_i are rational numbers in reduced form arranged in increasing order for i = 0, ... , n; 2. x_0, ... , x_n ∈ Z, and some x_i = 0; 3. we define x_-1=-infinity=-1/0 and x_n+1=infinity=1/0; 4. a_i+1b_i-a_ib_i+1=1 for i=-1, ... ,n. The ordered list of labels of a Farey symbol gives an additional structure to the gfs. The labels correspond to each consecutive pair of x_i's and are of the following types: 1. even, 2. odd, 3. a natural number, which occurs in the list of labels exactly twice or not at all. Note that the actual values of numerical labels are not important; it is the pairing of two intervals that matters. The package Congruence provides functions to construct Farey symbols by the given generalised Farey sequence and corresponding list of labels. The returned Farey symbol will belong to the category IsFareySymbol and will have the representation IsFareySymbolDefaultRep. 3.1 Construction of Farey symbols 3.1-1 FareySymbolByData FareySymbolByData( gfs, labels )  function This constructor creates the Farey symbol with the given generalized Farey sequence and list of labels. It also checks conditions from the definition of Farey symbol and returns an error if they are not satisfied. The data used to create the Farey symbol are stored as its attributes GeneralizedFareySequence (3.2-1) and LabelsOfFareySymbol (3.2-4).  Example   gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);  [ infinity, 0, 1, 2, infinity ] [ 1, 2, 2, 1 ]   3.1-2 IsValidFareySymbol IsValidFareySymbol( fs )  function This function is used in FareySymbolByData (3.1-1) to validate its output.  Example   gap> IsValidFareySymbol(fs); true   3.2 Properties of Farey symbols 3.2-1 GeneralizedFareySequence GeneralizedFareySequence( fs )  attribute Returns the generalized Farey sequence gfs of the Farey symbol.  Example   gap> GeneralizedFareySequence(fs); [ infinity, 0, 1, 2, infinity ]   3.2-2 NumeratorOfGFSElement NumeratorOfGFSElement( gfs, i )  function Returns: integer Returns the numerator of the i-th term of the generalised Farey sequence gfs: for the 1st infinite entry returns -1, for the last one returns 1, for all other entries returns the usual numerator.  Example   gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i)); [ -1, 0, 1, 2, 1 ]   3.2-3 DenominatorOfGFSElement DenominatorOfGFSElement( gfs, i )  function Returns: integer Returns the denominator of the i-th term of the generalised Farey sequence gfs: for both infinite entries returns 0, for the other ones returns the usual denominator.  Example   gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i));  [ 0, 1, 1, 1, 0 ]   3.2-4 LabelsOfFareySymbol LabelsOfFareySymbol( fs )  attribute Returns the list of labels of the Farey symbol. This list has "odd", "even" and paired integers as entries.  Example   gap> LabelsOfFareySymbol(fs); [ 1, 2, 2, 1 ]   congruence-1.2.5/doc/chapBib.html000644 000766 000024 00000010310 14376366051 016640 0ustar00obk1staff000000 000000 GAP (Congruence) - References

Goto Chapter: Top 1 2 3 4 5 Bib Ind

References

[CLLT93] Chan, S.-P., Lang, M.-L., Lim, C.-H. and Tan, S. P., Special polygons for subgroups of the modular group and applications, Internat. J. Math., 4 (1) (1993), 11--34.

[Kul91] Kulkarni, R. S., An arithmetic-geometric method in the study of the subgroups of the modular group, Amer. J. Math., 113 (6) (1991), 1053--1133.

[LLT95a] Lang, M.-L., Lim, C.-H. and Tan, S. P., An algorithm for determining if a subgroup of the modular group is congruence, J. London Math. Soc. (2), 51 (3) (1995), 491--502.

[LLT95b] Lang, M.-L., Lim, C.-H. and Tan, S. P., Independent generators for congruence subgroups of Hecke groups, Math. Z., 220 (4) (1995), 569--594.

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap0.html000644 000766 000024 00000034302 14376366051 016312 0ustar00obk1staff000000 000000 GAP (Congruence) - Contents
Goto Chapter: Top 1 2 3 4 5 Bib Ind

Congruence

Congruence subgroups of SL_2(ℤ)

Version 1.2.5

25 February 2023

Ann Dooms
Email: andooms@vub.ac.be
Homepage: http://homepages.vub.ac.be/~andooms
Address:
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium

Eric Jespers
Email: efjesper@vub.ac.be
Homepage: http://homepages.vub.ac.be/~efjesper
Address:
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium

Olexandr Konovalov
Email: obk1@st-andrews.ac.uk
Homepage: https://alex-konovalov.github.io/
Address:
School of Computer Science
University of St Andrews
Jack Cole Building, North Haugh,
St Andrews, Fife, KY16 9SX, Scotland

Helena Verrill
Email: verrill@math.lsu.edu
Homepage: http://www.math.lsu.edu/~verrill/
Address:
Department of Mathematics
Louisiana State University
Baton Rouge, Louisiana, 70803-4918
USA

Abstract

The GAP package Congruence provides functionality to work with congruence subgroups of SL_2(ℤ).

Copyright

© 2006-2023 by Ann Dooms, Eric Jespers, Olexandr Konovalov and Helena Verrill.

Congruence 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. For details, see the FSF's own site https://www.gnu.org/licenses/gpl.html.

If you obtained Congruence, we would be grateful for a short notification sent to one of the authors.

If you publish a result which was partially obtained with the usage of Congruence, please cite it in the following form:

A. Dooms, E. Jespers, O. Konovalov and H. Verrill. Congruence --- Congruence subgroups of SL_2(ℤ), Version 1.2.5; 2023 (https://gap-packages.github.io/congruence/).

Acknowledgements

We are very grateful to Mong-Lung Lang, Chong-Hai Lim and Ser Peow Tan for their comments provided while implementing algorithms from [LLT95a] and [LLT95b], and to Francqui Stichting (Belgium) for the support of the third author.

Contents


Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap1.txt000644 000766 000024 00000004202 14376366045 016165 0ustar00obk1staff000000 000000 1 Introduction 1.1 General aims of Congruence package The GAP package Congruence provides functions to construct several types of canonical congruence subgroups in SL_2(ℤ), and also intersections of a finite number of such subgroups. Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups. Using the package, one can also determine indices of congruence subgroups and their intersections in SL_2(ℤ) and in other congruence subgroups, generate their random elements and check element memberships. Success of other group theoretical constructions mostly depends on whether they could be expressed in terms of group generators or not. For the theoretical backround, we refer to [LLT95b], [LLT95a], [CLLT93] and [Kul91]. 1.2 Installation and system requirements Congruence is distributed in standard formats (tar.gz, tar.bz2, -win.zip) and can be obtained from https://gap-packages.github.io/congruence/. Congruence does not use external binaries and, therefore, works without restrictions on the operating system. It requires at least version GAP 4.5, and no compatibility with previous releases of GAP 4 is guaranteed. Installation of the package is standard and follows the guidelines from the GAP manual (see 'Reference: Installing a GAP Package'. After the package is installed, you can start GAP and load the Congruence package using the command:  Example   gap> LoadPackage("congruence");   congruence-1.2.5/doc/chap0.txt000644 000766 000024 00000013554 14376366045 016176 0ustar00obk1staff000000 000000 Congruence Congruence subgroups of SL_2(ℤ) Version 1.2.5 25 February 2023 Ann Dooms Eric Jespers Olexandr Konovalov Helena Verrill Ann Dooms Email: mailto:andooms@vub.ac.be Homepage: http://homepages.vub.ac.be/~andooms Address: Department of Mathematics, Vrije Universiteit Brussel Pleinlaan 2, Brussels, B-1050 Belgium Eric Jespers Email: mailto:efjesper@vub.ac.be Homepage: http://homepages.vub.ac.be/~efjesper Address: Department of Mathematics, Vrije Universiteit Brussel Pleinlaan 2, Brussels, B-1050 Belgium Olexandr Konovalov Email: mailto:obk1@st-andrews.ac.uk Homepage: https://alex-konovalov.github.io/ Address: School of Computer Science University of St Andrews Jack Cole Building, North Haugh, St Andrews, Fife, KY16 9SX, Scotland Helena Verrill Email: mailto:verrill@math.lsu.edu Homepage: http://www.math.lsu.edu/~verrill/ Address: Department of Mathematics Louisiana State University Baton Rouge, Louisiana, 70803-4918 USA ------------------------------------------------------- Abstract The GAP package Congruence provides functionality to work with congruence subgroups of SL_2(ℤ). ------------------------------------------------------- Copyright © 2006-2023 by Ann Dooms, Eric Jespers, Olexandr Konovalov and Helena Verrill. Congruence 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. For details, see the FSF's own site https://www.gnu.org/licenses/gpl.html. If you obtained Congruence, we would be grateful for a short notification sent to one of the authors. If you publish a result which was partially obtained with the usage of Congruence, please cite it in the following form: A. Dooms, E. Jespers, O. Konovalov and H. Verrill. Congruence --- Congruence subgroups of SL_2(ℤ), Version 1.2.5; 2023 (https://gap-packages.github.io/congruence/). ------------------------------------------------------- Acknowledgements We are very grateful to Mong-Lung Lang, Chong-Hai Lim and Ser Peow Tan for their comments provided while implementing algorithms from [LLT95a] and [LLT95b], and to Francqui Stichting (Belgium) for the support of the third author. ------------------------------------------------------- Contents (Congruence) 1 Introduction 1.1 General aims of Congruence package 1.2 Installation and system requirements 2 Construction of congruence subgroups 2.1 Construction of congruence subgroups 2.1-1 PrincipalCongruenceSubgroup 2.1-2 CongruenceSubgroupGamma0 2.1-3 CongruenceSubgroupGammaUpper0 2.1-4 CongruenceSubgroupGamma1 2.1-5 CongruenceSubgroupGammaUpper1 2.1-6 IntersectionOfCongruenceSubgroups 2.2 Properties of congruence subgroups 2.2-1 IsPrincipalCongruenceSubgroup 2.2-2 IsCongruenceSubgroupGamma0 2.2-3 IsCongruenceSubgroupGammaUpper0 2.2-4 IsCongruenceSubgroupGamma1 2.2-5 IsCongruenceSubgroupGammaUpper1 2.2-6 IsIntersectionOfCongruenceSubgroups 2.3 Attributes of congruence subgroups 2.3-1 LevelOfCongruenceSubgroup 2.3-2 IndexInSL2Z 2.3-3 DefiningCongruenceSubgroups 2.4 Operations for congruence subgroups 2.4-1 Random 2.4-2 \in 2.4-3 CanEasilyCompareCongruenceSubgroups 2.4-4 IsSubset 2.4-5 Index 3 Farey symbols and their properties 3.1 Construction of Farey symbols 3.1-1 FareySymbolByData 3.1-2 IsValidFareySymbol 3.2 Properties of Farey symbols 3.2-1 GeneralizedFareySequence 3.2-2 NumeratorOfGFSElement 3.2-3 DenominatorOfGFSElement 3.2-4 LabelsOfFareySymbol 4 Farey symbols for congruence subgroups 4.1 Computation of the Farey symbol for a finite index subgroup 4.1-1 FareySymbol 4.2 Computation of generators of a finite index subgroup from its Farey symbol 4.2-1 MatrixByEvenInterval 4.2-2 MatrixByOddInterval 4.2-3 MatrixByFreePairOfIntervals 4.2-4 GeneratorsByFareySymbol 4.2-5 GeneratorsOfGroup 4.3 Other properties derived from Farey symbols 4.3-1 IndexInPSL2ZByFareySymbol 5 Service functions of the Congruence package 5.1 Additional information displayed by Congruence algorithms 5.1-1 InfoCongruence  congruence-1.2.5/doc/chap4_mj.html000644 000766 000024 00000037603 14376366051 017013 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 4: Farey symbols for congruence subgroups
Goto Chapter: Top 1 2 3 4 5 Bib Ind

4 Farey symbols for congruence subgroups

The package Congruence provides functions to construct Farey symbols for finite index subgroups. The algorithm used in the package allows to construct a Farey symbol for any finite index subgroup of \(SL_2(ℤ)\) for which it is possible to check whether a given matrix belongs to this subgroup or not.

The development of an algorithm to determine the Farey symbol for a subgroup G of a finite index in \(SL_2(ℤ)\) was started by Ravi Kulkarni in [Kul91] and later it was improved by Mong-Lung Lang, Chong-Hai Lim and Ser-Peow Tan in [LLT95b], [LLT95a].

4.1 Computation of the Farey symbol for a finite index subgroup

4.1-1 FareySymbol
‣ FareySymbol( G )( attribute )

For a subgroup of a finite index G, this attribute stores one of the Farey symbols corresponding to the congruence subgroup G. The algorithm for its computation will work for any matrix group for which a membership test is available.


gap> FareySymbol(PrincipalCongruenceSubgroup(8));
[ infinity, 0, 1/4, 1/3, 3/8, 2/5, 1/2, 3/5, 5/8, 2/3, 3/4, 1, 5/4, 4/3, 
  11/8, 7/5, 3/2, 8/5, 13/8, 5/3, 7/4, 2, 9/4, 7/3, 19/8, 12/5, 5/2, 13/5, 
  21/8, 8/3, 11/4, 3, 13/4, 10/3, 27/8, 17/5, 7/2, 18/5, 29/8, 11/3, 15/4, 4, 
  17/4, 13/3, 9/2, 14/3, 19/4, 5, 21/4, 16/3, 11/2, 17/3, 23/4, 6, 25/4, 
  19/3, 13/2, 20/3, 27/4, 7, 29/4, 22/3, 15/2, 23/3, 31/4, 8, infinity ]
[ 1, 17, 10, 26, 32, 18, 19, 27, 30, 5, 2, 2, 13, 28, 26, 20, 21, 29, 27, 7, 
  3, 3, 16, 31, 28, 22, 23, 33, 29, 9, 4, 4, 5, 30, 31, 24, 25, 32, 33, 12, 
  6, 6, 7, 19, 18, 15, 8, 8, 9, 21, 20, 10, 11, 11, 12, 23, 22, 13, 14, 14, 
  15, 25, 24, 16, 17, 1 ]
gap> FareySymbol(CongruenceSubgroupGamma0(20));
[ infinity, 0, 1/5, 1/4, 2/7, 3/10, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1, 
  infinity ]
[ 1, 3, 4, 6, 7, 7, 5, 2, 2, 3, 6, 4, 5, 1 ]  

4.2 Computation of generators of a finite index subgroup from its Farey symbol

If fs is the Farey symbol for a group \(G\) with \(r_1\) even labels, \(r_2\) odd labels and \(r_3\) pairs of intervals, then \(G\) is generated by \(r_1+r_2+r_3\) matrices, which form a set of independent generators for \(G\). These matrices are constructed as follows:

for each even interval \([x_i, x_{i+1}]\), take the matrix


                       A=  [a_{i+1} b_{i+1} + a_i b_i    -a_i^2 - a_{i+1}^2        ]
                           [b_i^2 +b_{i+1}^2             -a_{i+1} b_{i+1} - a_i b_i]

for each odd interval \([x_j,x_{j+1}]\), take the matrix


                        B=  [a_{j+1} b_{j+1} + a_j b_{j+1} + a_j b_j      -a_j^2 - a_j a_{j+1} -a_{j+1}^2]
                            [ b_j^2 + b_j b_{j+1} + b_{j+1}^2  -a_{j+1}   b_{j+1} - a_{j+1} b_j - a_j b_j]

for each pair of free intervals \([x_k,x_{k+1}]\) and \([x_s,x_{s+1}]\), take the matrix


                        C=  [a_{s+1} b_{k+1} + a_s b_k    -a_s a_k - a_{s+1} a_{k+1}]
                            [b_s b_k- b_{s+1} b_{k+1}c    -a_{k+1} b_{s+1} - a_k b_s]

4.2-1 MatrixByEvenInterval
‣ MatrixByEvenInterval( gfs, i )( function )

Returns the matrix corresponding to the even interval i in the generalized Farey sequence gfs.


gap> H:=CongruenceSubgroupGamma0(5); 
<congruence subgroup CongruenceSubgroupGamma_0(5) in SL_2(Z)>
gap> fs:=FareySymbol(H);
[ infinity, 0, 1/2, 1, infinity ]
[ 1, "even", "even", 1 ]
gap> gfs:=GeneralizedFareySequence(fs);
[ infinity, 0, 1/2, 1, infinity ]
gap> MatrixByEvenInterval(gfs,2);      
[ [ 2, -1 ], [ 5, -2 ] ]

4.2-2 MatrixByOddInterval
‣ MatrixByOddInterval( gfs, i )( function )

Returns the matrix corresponding to the odd interval i in the generalized Farey sequence gfs.


gap> fs_oo:=FareySymbolByData([infinity,0,infinity],["odd","odd"]);;
gap> gfs_oo:=GeneralizedFareySequence(fs_oo);
[ infinity, 0, infinity ]
gap> MatrixByOddInterval(gfs_oo,1);
[ [ -1, -1 ], [ 1, 0 ] ]

4.2-3 MatrixByFreePairOfIntervals
‣ MatrixByFreePairOfIntervals( gfs, k, kp )( function )

Returns the matrix corresponding to the pair of free intervals k and kp in the generalized Farey sequence gfs.


gap> fs_free:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);;
gap> gfs_free:=GeneralizedFareySequence(fs_free);;
gap> MatrixByFreePairOfIntervals(gfs_free,2,3);                                                        
[ [ 3, -2 ], [ 2, -1 ] ]

4.2-4 GeneratorsByFareySymbol
‣ GeneratorsByFareySymbol( fs )( function )

Returns a set of matrices constructed as above.


gap> fs_eo:=FareySymbolByData([infinity,0,infinity],["even","odd"]);;
gap> GeneratorsByFareySymbol(last);                                  
[ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ]
gap> GeneratorsByFareySymbol(fs); 
[ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ]
gap> GeneratorsByFareySymbol(fs_oo);
[ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ]
gap> GeneratorsByFareySymbol(fs_free);                                                        
[ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ]

4.2-5 GeneratorsOfGroup
‣ GeneratorsOfGroup( G )( function )

Returns a set of generators for the finite index group G in \(SL_2(Z)\).


gap> G:=PrincipalCongruenceSubgroup(2);
<principal congruence subgroup of level 2 in SL_2(Z)>
gap> FareySymbol(G);
[ infinity, 0, 1, 2, infinity ]
[ 2, 1, 1, 2 ]
gap> GeneratorsOfGroup(G);
#I  Using the Congruence package for GeneratorsOfGroup ...
[ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ]
gap> H:=CongruenceSubgroupGamma0(5);        
<congruence subgroup CongruenceSubgroupGamma_0(5) in SL_2(Z)>
gap> GeneratorsOfGroup(H);
#I  Using the Congruence package for GeneratorsOfGroup ...
[ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ]
gap> I:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(3));
<intersection of congruence subgroups of resulting level 6 in SL_2(Z)>
gap> FareySymbol(I);
[ infinity, 0, 1/3, 1/2, 2/3, 1, 4/3, 3/2, 5/3, 2, infinity ]
[ 1, 5, 4, 3, 2, 2, 3, 4, 5, 1 ]
gap> GeneratorsOfGroup(I);                                                          
#I  Using the Congruence package for GeneratorsOfGroup ...
[ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 11, -2 ], [ 6, -1 ] ], 
  [ [ 19, -8 ], [ 12, -5 ] ], [ [ 17, -10 ], [ 12, -7 ] ], 
  [ [ 7, -6 ], [ 6, -5 ] ] ]

4.3 Other properties derived from Farey symbols

4.3-1 IndexInPSL2ZByFareySymbol
‣ IndexInPSL2ZByFareySymbol( fs )( function )

By Proposition 7.2 in [Kulkarni], for the Farey symbol with underlying generalized Farey sequence [infinity, x0, x1, ..., xn, infinity], the index in \(PSL_2(Z)\) is given by the formula d = 3*n + e3, where e3 is the number of odd intervals.


gap> IndexInPSL2ZByFareySymbol(fs);
6
gap> IndexInPSL2ZByFareySymbol(fs_oo);
2
gap> IndexInPSL2ZByFareySymbol(fs_free);
6

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/manual.css000644 000766 000024 00000015754 14376366051 016432 0ustar00obk1staff000000 000000 /* manual.css Frank Lübeck */ /* This is the default CSS style sheet for GAPDoc HTML manuals. */ /* basic settings, fonts, sizes, colors, ... */ body { position: relative; background: #ffffff; color: #000000; width: 70%; margin: 0pt; padding: 15pt; font-family: Helvetica,Verdana,Arial,sans-serif; text-align: justify; } /* no side toc on title page, bib and index */ body.chap0 { width: 95%; } body.chapBib { width: 95%; } body.chapInd { width: 95%; } h1 { font-size: 200%; } h2 { font-size: 160%; } h3 { font-size: 160%; } h4 { font-size: 130%; } h5 { font-size: 100%; } p.foot { font-size: 60%; font-style: normal; } a:link { color: #00008e; text-decoration: none; } a:visited { color: #00008e; text-decoration: none; } a:active { color: #000000; text-decoration: none; } a:hover { background: #eeeeee; } pre { font-family: "Courier New",Courier,monospace; font-size: 100%; color:#111111; } tt,code { font-family: "Courier New",Courier,monospace; font-size: 110%; color: #000000; } var { } /* general alignment classes */ .pcenter { text-align: center; } .pleft { text-align: left; } .pright { text-align: right; } /* layout for the definitions of functions, variables, ... */ div.func { background: #e0e0e0; margin: 0pt 0pt; } /* general and special table settings */ table { border-collapse: collapse; margin-left: auto; margin-right: auto; } td, th { border-style: none; } table.func { padding: 0pt 1ex; margin-left: 1ex; margin-right: 1ex; background: transparent; /* line-height: 1.1; */ width: 100%; } table.func td.tdright { padding-right: 2ex; } /* Example elements (for old converted manuals, now in div+pre */ table.example { background: #efefef; border-style: none; border-width: 0pt; padding: 0px; width: 100% } table.example td { border-style: none; border-width: 0pt; padding: 0ex 1ex; } /* becomes ... */ div.example { background: #efefef; padding: 0ex 1ex; /* overflow-x: auto; */ overflow: auto; } /* Links to chapters in all files at top and bottom. */ /* If there are too many chapters then use 'display: none' here. */ div.chlinktop { background: #dddddd; border-style: solid; border-width: thin; margin: 2px; text-align: center; } div.chlinktop a { margin: 3px; } div.chlinktop a:hover { background: #ffffff; } div.chlinkbot { background: #dddddd; border-style: solid; border-width: thin; margin: 2px; text-align: center; /* width: 100%; */ } div.chlinkbot a { margin: 3px; } span.chlink1 { } /* and this is for the "Top", "Prev", "Next" links */ div.chlinkprevnexttop { background: #dddddd; border-style: solid; border-width: thin; text-align: center; margin: 2px; } div.chlinkprevnexttop a:hover { background: #ffffff; } div.chlinkprevnextbot { background: #dddddd; border-style: solid; border-width: thin; text-align: center; margin: 2px; } div.chlinkprevnextbot a:hover { background: #ffffff; } /* table of contents, initially don't display subsections */ div.ContSSBlock { display: none; } div.ContSSBlock br { display: none; } /* format in separate lines */ span.tocline { display: block; width: 100%; } div.ContSSBlock a { display: block; } /* this is for the main table of contents */ div.ContChap { } div.ContChap div.ContSect:hover div.ContSSBlock { display: block; position: absolute; background: #eeeeee; border-style: solid; border-width: 1px 4px 4px 1px; border-color: #666666; padding-left: 0.5ex; color: #000000; left: 20%; width: 40%; z-index: 10000; } div.ContSSBlock a:hover { background: #ffffff; } /* and here for the side menu of contents in the chapter files */ div.ChapSects { } div.ChapSects a:hover { background: #eeeeee; } div.ChapSects a:hover { display: block; width: 100%; background: #eeeeee; color: #000000; } div.ChapSects div.ContSect:hover div.ContSSBlock { display: block; position: fixed; background: #eeeeee; border-style: solid; border-width: 1px 2px 2px 1px; border-color: #666666; padding-left: 0ex; padding-right: 0.5ex; color: #000000; left: 54%; width: 25%; z-index: 10000; } div.ChapSects div.ContSect:hover div.ContSSBlock a { display: block; margin-left: 3px; } div.ChapSects div.ContSect:hover div.ContSSBlock a:hover { display: block; background: #ffffff; } div.ContSect { text-align: left; margin-left: 1em; } div.ChapSects { position: fixed; left: 75%; font-size: 90%; overflow: auto; top: 10px; bottom: 0px; } /* Table elements */ table.GAPDocTable { border-collapse: collapse; border-style: none; border-color: black; } table.GAPDocTable td, table.GAPDocTable th { padding: 3pt; border-width: thin; border-style: solid; border-color: #555555; } caption.GAPDocTable { caption-side: bottom; width: 70%; margin-top: 1em; margin-left: auto; margin-right: auto; } td.tdleft { text-align: left; } table.GAPDocTablenoborder { border-collapse: collapse; border-style: none; border-color: black; } table.GAPDocTablenoborder td, table.GAPDocTable th { padding: 3pt; border-width: 0pt; border-style: solid; border-color: #555555; } caption.GAPDocTablenoborder { caption-side: bottom; width: 70%; margin-top: 1em; margin-left: auto; margin-right: auto; } td.tdleft { text-align: left; } td.tdright { text-align: right; } td.tdcenter { text-align: center; } /* Colors and fonts can be overwritten for some types of elements. */ /* Verb elements */ pre.normal { color: #000000; } /* Func-like elements and Ref to Func-like */ code.func { color: #000000; } /* K elements */ code.keyw { color: #770000; } /* F elements */ code.file { color: #8e4510; } /* C elements */ code.code { } /* Item elements */ code.i { } /* Button elements */ strong.button { } /* Headings */ span.Heading { } /* Arg elements */ var.Arg { color: #006600; } /* Example elements, is in tables, see above */ div.Example { } /* Package elements */ strong.pkg { } /* URL-like elements */ span.URL { } /* Mark elements */ strong.Mark { } /* Ref elements */ b.Ref { } span.Ref { } /* this contains the contents page */ div.contents { } /* this contains the index page */ div.index { } /* ignore some text for non-css layout */ span.nocss { display: none; } /* colors for ColorPrompt like examples */ span.GAPprompt { color: #000097; font-weight: normal; } span.GAPbrkprompt { color: #970000; font-weight: normal; } span.GAPinput { color: #970000; } /* Bib entries */ p.BibEntry { } span.BibKey { color: #005522; } span.BibKeyLink { } b.BibAuthor { } i.BibTitle { } i.BibBookTitle { } span.BibEditor { } span.BibJournal { } span.BibType { } span.BibPublisher { } span.BibSchool { } span.BibEdition { } span.BibVolume { } span.BibSeries { } span.BibNumber { } span.BibPages { } span.BibOrganization { } span.BibAddress { } span.BibYear { } span.BibPublisher { } span.BibNote { } span.BibHowpublished { } congruence-1.2.5/doc/chap4.txt000644 000766 000024 00000024665 14376366045 016207 0ustar00obk1staff000000 000000 4 Farey symbols for congruence subgroups The package Congruence provides functions to construct Farey symbols for finite index subgroups. The algorithm used in the package allows to construct a Farey symbol for any finite index subgroup of SL_2(ℤ) for which it is possible to check whether a given matrix belongs to this subgroup or not. The development of an algorithm to determine the Farey symbol for a subgroup G of a finite index in SL_2(ℤ) was started by Ravi Kulkarni in [Kul91] and later it was improved by Mong-Lung Lang, Chong-Hai Lim and Ser-Peow Tan in [LLT95b], [LLT95a]. 4.1 Computation of the Farey symbol for a finite index subgroup 4.1-1 FareySymbol FareySymbol( G )  attribute For a subgroup of a finite index G, this attribute stores one of the Farey symbols corresponding to the congruence subgroup G. The algorithm for its computation will work for any matrix group for which a membership test is available.  Example   gap> FareySymbol(PrincipalCongruenceSubgroup(8)); [ infinity, 0, 1/4, 1/3, 3/8, 2/5, 1/2, 3/5, 5/8, 2/3, 3/4, 1, 5/4, 4/3,   11/8, 7/5, 3/2, 8/5, 13/8, 5/3, 7/4, 2, 9/4, 7/3, 19/8, 12/5, 5/2, 13/5,   21/8, 8/3, 11/4, 3, 13/4, 10/3, 27/8, 17/5, 7/2, 18/5, 29/8, 11/3, 15/4, 4,   17/4, 13/3, 9/2, 14/3, 19/4, 5, 21/4, 16/3, 11/2, 17/3, 23/4, 6, 25/4,   19/3, 13/2, 20/3, 27/4, 7, 29/4, 22/3, 15/2, 23/3, 31/4, 8, infinity ] [ 1, 17, 10, 26, 32, 18, 19, 27, 30, 5, 2, 2, 13, 28, 26, 20, 21, 29, 27, 7,   3, 3, 16, 31, 28, 22, 23, 33, 29, 9, 4, 4, 5, 30, 31, 24, 25, 32, 33, 12,   6, 6, 7, 19, 18, 15, 8, 8, 9, 21, 20, 10, 11, 11, 12, 23, 22, 13, 14, 14,   15, 25, 24, 16, 17, 1 ] gap> FareySymbol(CongruenceSubgroupGamma0(20)); [ infinity, 0, 1/5, 1/4, 2/7, 3/10, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1,   infinity ] [ 1, 3, 4, 6, 7, 7, 5, 2, 2, 3, 6, 4, 5, 1 ]    4.2 Computation of generators of a finite index subgroup from its Farey symbol If fs is the Farey symbol for a group G with r_1 even labels, r_2 odd labels and r_3 pairs of intervals, then G is generated by r_1+r_2+r_3 matrices, which form a set of independent generators for G. These matrices are constructed as follows: for each even interval [x_i, x_i+1], take the matrix A= [a_{i+1} b_{i+1} + a_i b_i -a_i^2 - a_{i+1}^2 ] [b_i^2 +b_{i+1}^2 -a_{i+1} b_{i+1} - a_i b_i] for each odd interval [x_j,x_j+1], take the matrix B= [a_{j+1} b_{j+1} + a_j b_{j+1} + a_j b_j -a_j^2 - a_j a_{j+1} -a_{j+1}^2] [ b_j^2 + b_j b_{j+1} + b_{j+1}^2 -a_{j+1} b_{j+1} - a_{j+1} b_j - a_j b_j] for each pair of free intervals [x_k,x_k+1] and [x_s,x_s+1], take the matrix C= [a_{s+1} b_{k+1} + a_s b_k -a_s a_k - a_{s+1} a_{k+1}] [b_s b_k- b_{s+1} b_{k+1}c -a_{k+1} b_{s+1} - a_k b_s] 4.2-1 MatrixByEvenInterval MatrixByEvenInterval( gfs, i )  function Returns the matrix corresponding to the even interval i in the generalized Farey sequence gfs.  Example   gap> H:=CongruenceSubgroupGamma0(5);   gap> fs:=FareySymbol(H); [ infinity, 0, 1/2, 1, infinity ] [ 1, "even", "even", 1 ] gap> gfs:=GeneralizedFareySequence(fs); [ infinity, 0, 1/2, 1, infinity ] gap> MatrixByEvenInterval(gfs,2);  [ [ 2, -1 ], [ 5, -2 ] ]   4.2-2 MatrixByOddInterval MatrixByOddInterval( gfs, i )  function Returns the matrix corresponding to the odd interval i in the generalized Farey sequence gfs.  Example   gap> fs_oo:=FareySymbolByData([infinity,0,infinity],["odd","odd"]);; gap> gfs_oo:=GeneralizedFareySequence(fs_oo); [ infinity, 0, infinity ] gap> MatrixByOddInterval(gfs_oo,1); [ [ -1, -1 ], [ 1, 0 ] ]   4.2-3 MatrixByFreePairOfIntervals MatrixByFreePairOfIntervals( gfs, k, kp )  function Returns the matrix corresponding to the pair of free intervals k and kp in the generalized Farey sequence gfs.  Example   gap> fs_free:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);; gap> gfs_free:=GeneralizedFareySequence(fs_free);; gap> MatrixByFreePairOfIntervals(gfs_free,2,3);  [ [ 3, -2 ], [ 2, -1 ] ]   4.2-4 GeneratorsByFareySymbol GeneratorsByFareySymbol( fs )  function Returns a set of matrices constructed as above.  Example   gap> fs_eo:=FareySymbolByData([infinity,0,infinity],["even","odd"]);; gap> GeneratorsByFareySymbol(last);  [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> GeneratorsByFareySymbol(fs);  [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> GeneratorsByFareySymbol(fs_oo); [ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> GeneratorsByFareySymbol(fs_free);  [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ]   4.2-5 GeneratorsOfGroup GeneratorsOfGroup( G )  function Returns a set of generators for the finite index group G in SL_2(Z).  Example   gap> G:=PrincipalCongruenceSubgroup(2);  gap> FareySymbol(G); [ infinity, 0, 1, 2, infinity ] [ 2, 1, 1, 2 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] gap> H:=CongruenceSubgroupGamma0(5);   gap> GeneratorsOfGroup(H); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> I:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(3));  gap> FareySymbol(I); [ infinity, 0, 1/3, 1/2, 2/3, 1, 4/3, 3/2, 5/3, 2, infinity ] [ 1, 5, 4, 3, 2, 2, 3, 4, 5, 1 ] gap> GeneratorsOfGroup(I);  #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 11, -2 ], [ 6, -1 ] ],   [ [ 19, -8 ], [ 12, -5 ] ], [ [ 17, -10 ], [ 12, -7 ] ],   [ [ 7, -6 ], [ 6, -5 ] ] ]   4.3 Other properties derived from Farey symbols 4.3-1 IndexInPSL2ZByFareySymbol IndexInPSL2ZByFareySymbol( fs )  function By Proposition 7.2 in [Kulkarni], for the Farey symbol with underlying generalized Farey sequence [infinity, x0, x1, ..., xn, infinity], the index in PSL_2(Z) is given by the formula d = 3*n + e3, where e3 is the number of odd intervals.  Example   gap> IndexInPSL2ZByFareySymbol(fs); 6 gap> IndexInPSL2ZByFareySymbol(fs_oo); 2 gap> IndexInPSL2ZByFareySymbol(fs_free); 6   congruence-1.2.5/doc/chap5.txt000644 000766 000024 00000001341 14376366045 016172 0ustar00obk1staff000000 000000 5 Service functions of the Congruence package 5.1 Additional information displayed by Congruence algorithms 5.1-1 InfoCongruence InfoCongruence  info class InfoCongruence is a special Info class for Congruence algorithms. It has 3 levels: 0, 1 (default) and 2. To change the info level to k, use the command SetInfoLevel(InfoCongruence, k). In the example below we use this mechanism to see more details during the Farey symbol construction for a congruence subgroup. congruence-1.2.5/doc/ragged.css000644 000766 000024 00000000231 14376366051 016366 0ustar00obk1staff000000 000000 /* times.css Frank Lübeck */ /* Change default CSS to use Times font. */ body { text-align: left; } congruence-1.2.5/doc/chap1.html000644 000766 000024 00000012217 14376366051 016314 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 1: Introduction
Goto Chapter: Top 1 2 3 4 5 Bib Ind

1 Introduction

1.1 General aims of Congruence package

The GAP package Congruence provides functions to construct several types of canonical congruence subgroups in SL_2(ℤ), and also intersections of a finite number of such subgroups.

Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups.

Using the package, one can also determine indices of congruence subgroups and their intersections in SL_2(ℤ) and in other congruence subgroups, generate their random elements and check element memberships. Success of other group theoretical constructions mostly depends on whether they could be expressed in terms of group generators or not.

For the theoretical backround, we refer to [LLT95b], [LLT95a], [CLLT93] and [Kul91].

1.2 Installation and system requirements

Congruence is distributed in standard formats (tar.gz, tar.bz2, -win.zip) and can be obtained from https://gap-packages.github.io/congruence/.

Congruence does not use external binaries and, therefore, works without restrictions on the operating system. It requires at least version GAP 4.5, and no compatibility with previous releases of GAP 4 is guaranteed.

Installation of the package is standard and follows the guidelines from the GAP manual (see Reference: Installing a GAP Package. After the package is installed, you can start GAP and load the Congruence package using the command:


gap> LoadPackage("congruence");

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chap5_mj.html000644 000766 000024 00000007525 14376366051 017014 0ustar00obk1staff000000 000000 GAP (Congruence) - Chapter 5: Service functions of the Congruence package
Goto Chapter: Top 1 2 3 4 5 Bib Ind

5 Service functions of the Congruence package

5.1 Additional information displayed by Congruence algorithms

5.1-1 InfoCongruence
‣ InfoCongruence( info class )

InfoCongruence is a special Info class for Congruence algorithms. It has 3 levels: 0, 1 (default) and 2. To change the info level to k, use the command SetInfoLevel(InfoCongruence, k).

In the example below we use this mechanism to see more details during the Farey symbol construction for a congruence subgroup.

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/gens.xml000644 000766 000024 00000021456 14376366031 016113 0ustar00obk1staff000000 000000 Farey symbols for congruence subgroups The package &Congruence; provides functions to construct Farey symbols for finite index subgroups. The algorithm used in the package allows to construct a Farey symbol for any finite index subgroup of SL_2(&ZZ;) for which it is possible to check whether a given matrix belongs to this subgroup or not.

The development of an algorithm to determine the Farey symbol for a subgroup G of a finite index in SL_2(&ZZ;) was started by Ravi Kulkarni in and later it was improved by Mong-Lung Lang, Chong-Hai Lim and Ser-Peow Tan in , .

Computation of the Farey symbol for a finite index subgroup For a subgroup of a finite index G, this attribute stores one of the Farey symbols corresponding to the congruence subgroup G. The algorithm for its computation will work for any matrix group for which a membership test is available. FareySymbol(PrincipalCongruenceSubgroup(8)); [ infinity, 0, 1/4, 1/3, 3/8, 2/5, 1/2, 3/5, 5/8, 2/3, 3/4, 1, 5/4, 4/3, 11/8, 7/5, 3/2, 8/5, 13/8, 5/3, 7/4, 2, 9/4, 7/3, 19/8, 12/5, 5/2, 13/5, 21/8, 8/3, 11/4, 3, 13/4, 10/3, 27/8, 17/5, 7/2, 18/5, 29/8, 11/3, 15/4, 4, 17/4, 13/3, 9/2, 14/3, 19/4, 5, 21/4, 16/3, 11/2, 17/3, 23/4, 6, 25/4, 19/3, 13/2, 20/3, 27/4, 7, 29/4, 22/3, 15/2, 23/3, 31/4, 8, infinity ] [ 1, 17, 10, 26, 32, 18, 19, 27, 30, 5, 2, 2, 13, 28, 26, 20, 21, 29, 27, 7, 3, 3, 16, 31, 28, 22, 23, 33, 29, 9, 4, 4, 5, 30, 31, 24, 25, 32, 33, 12, 6, 6, 7, 19, 18, 15, 8, 8, 9, 21, 20, 10, 11, 11, 12, 23, 22, 13, 14, 14, 15, 25, 24, 16, 17, 1 ] gap> FareySymbol(CongruenceSubgroupGamma0(20)); [ infinity, 0, 1/5, 1/4, 2/7, 3/10, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1, infinity ] [ 1, 3, 4, 6, 7, 7, 5, 2, 2, 3, 6, 4, 5, 1 ] ]]>
Computation of generators of a finite index subgroup from its Farey symbol If fs is the Farey symbol for a group G with r_1 even labels, r_2 odd labels and r_3 pairs of intervals, then G is generated by r_1+r_2+r_3 matrices, which form a set of independent generators for G. These matrices are constructed as follows:

for each even interval [x_i, x_{i+1}], take the matrix

for each odd interval [x_j,x_{j+1}], take the matrix

for each pair of free intervals [x_k,x_{k+1}] and [x_s,x_{s+1}], take the matrix Returns the matrix corresponding to the even interval i in the generalized Farey sequence gfs. H:=CongruenceSubgroupGamma0(5); gap> fs:=FareySymbol(H); [ infinity, 0, 1/2, 1, infinity ] [ 1, "even", "even", 1 ] gap> gfs:=GeneralizedFareySequence(fs); [ infinity, 0, 1/2, 1, infinity ] gap> MatrixByEvenInterval(gfs,2); [ [ 2, -1 ], [ 5, -2 ] ] ]]> Returns the matrix corresponding to the odd interval i in the generalized Farey sequence gfs. fs_oo:=FareySymbolByData([infinity,0,infinity],["odd","odd"]);; gap> gfs_oo:=GeneralizedFareySequence(fs_oo); [ infinity, 0, infinity ] gap> MatrixByOddInterval(gfs_oo,1); [ [ -1, -1 ], [ 1, 0 ] ] ]]> Returns the matrix corresponding to the pair of free intervals k and kp in the generalized Farey sequence gfs. fs_free:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]);; gap> gfs_free:=GeneralizedFareySequence(fs_free);; gap> MatrixByFreePairOfIntervals(gfs_free,2,3); [ [ 3, -2 ], [ 2, -1 ] ] ]]> Returns a set of matrices constructed as above. fs_eo:=FareySymbolByData([infinity,0,infinity],["even","odd"]);; gap> GeneratorsByFareySymbol(last); [ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> GeneratorsByFareySymbol(fs); [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> GeneratorsByFareySymbol(fs_oo); [ [ [ -1, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, -1 ] ] ] gap> GeneratorsByFareySymbol(fs_free); [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] ]]> Returns a set of generators for the finite index group G in SL_2(Z). G:=PrincipalCongruenceSubgroup(2); gap> FareySymbol(G); [ infinity, 0, 1, 2, infinity ] [ 2, 1, 1, 2 ] gap> GeneratorsOfGroup(G); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 3, -2 ], [ 2, -1 ] ] ] gap> H:=CongruenceSubgroupGamma0(5); gap> GeneratorsOfGroup(H); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 1 ], [ 0, 1 ] ], [ [ 2, -1 ], [ 5, -2 ] ], [ [ 3, -2 ], [ 5, -3 ] ] ] gap> I:=IntersectionOfCongruenceSubgroups(PrincipalCongruenceSubgroup(2),CongruenceSubgroupGamma0(3)); gap> FareySymbol(I); [ infinity, 0, 1/3, 1/2, 2/3, 1, 4/3, 3/2, 5/3, 2, infinity ] [ 1, 5, 4, 3, 2, 2, 3, 4, 5, 1 ] gap> GeneratorsOfGroup(I); #I Using the Congruence package for GeneratorsOfGroup ... [ [ [ 1, 2 ], [ 0, 1 ] ], [ [ 11, -2 ], [ 6, -1 ] ], [ [ 19, -8 ], [ 12, -5 ] ], [ [ 17, -10 ], [ 12, -7 ] ], [ [ 7, -6 ], [ 6, -5 ] ] ] ]]>

Other properties derived from Farey symbols By Proposition 7.2 in [Kulkarni], for the Farey symbol with underlying generalized Farey sequence [infinity, x0, x1, ..., xn, infinity], the index in PSL_2(Z) is given by the formula d = 3*n + e3, where e3 is the number of odd intervals. IndexInPSL2ZByFareySymbol(fs); 6 gap> IndexInPSL2ZByFareySymbol(fs_oo); 2 gap> IndexInPSL2ZByFareySymbol(fs_free); 6 ]]>
congruence-1.2.5/doc/toggless.js000644 000766 000024 00000004205 14376366051 016615 0ustar00obk1staff000000 000000 /* toggless.js Frank Lübeck */ /* this file contains two functions: mergeSideTOCHooks: this changes div.ContSect elements to the class ContSectClosed and includes a hook to toggle between ContSectClosed and ContSectOpen. openclosetoc: this function does the toggling, the rest is done by CSS */ closedTOCMarker = "▶ "; openTOCMarker = "▼ "; noTOCMarker = " "; /* merge hooks into side toc for opening/closing subsections with openclosetoc */ function mergeSideTOCHooks() { var hlist = document.getElementsByTagName("div"); for (var i = 0; i < hlist.length; i++) { if (hlist[i].className == "ContSect") { var chlds = hlist[i].childNodes; var el = document.createElement("span"); var oncl = document.createAttribute("class"); oncl.nodeValue = "toctoggle"; el.setAttributeNode(oncl); var cont; if (chlds.length > 2) { var oncl = document.createAttribute("onclick"); oncl.nodeValue = "openclosetoc(event)"; el.setAttributeNode(oncl); cont = document.createTextNode(closedTOCMarker); } else { cont = document.createTextNode(noTOCMarker); } el.appendChild(cont); hlist[i].firstChild.insertBefore(el, hlist[i].firstChild.firstChild); hlist[i].className = "ContSectClosed"; } } } function openclosetoc (event) { /* first two steps to make it work in most browsers */ var evt=window.event || event; if (!evt.target) evt.target=evt.srcElement; var markClosed = document.createTextNode(closedTOCMarker); var markOpen = document.createTextNode(openTOCMarker); var par = evt.target.parentNode.parentNode; if (par.className == "ContSectOpen") { par.className = "ContSectClosed"; evt.target.replaceChild(markClosed, evt.target.firstChild); } else if (par.className == "ContSectClosed") { par.className = "ContSectOpen"; evt.target.replaceChild(markOpen, evt.target.firstChild); } } /* adjust jscontent which is called onload */ jscontentfuncs.push(mergeSideTOCHooks); congruence-1.2.5/doc/chapInd_mj.html000644 000766 000024 00000014704 14376366051 017357 0ustar00obk1staff000000 000000 GAP (Congruence) - Index
Goto Chapter: Top 1 2 3 4 5 Bib Ind

Index

\in 2.4-2
CanEasilyCompareCongruenceSubgroups 2.4-3
Congruence package .-1
CongruenceSubgroupGamma0 2.1-2
CongruenceSubgroupGamma1 2.1-4
CongruenceSubgroupGammaUpper0 2.1-3
CongruenceSubgroupGammaUpper1 2.1-5
DefiningCongruenceSubgroups 2.3-3
DenominatorOfGFSElement 3.2-3
FareySymbol 4.1-1
FareySymbolByData 3.1-1
GeneralizedFareySequence 3.2-1
GeneratorsByFareySymbol 4.2-4
GeneratorsOfGroup 4.2-5
Index 2.4-5
IndexInPSL2ZByFareySymbol 4.3-1
IndexInSL2Z 2.3-2
InfoCongruence 5.1-1
Intersection 2.1-6
IntersectionOfCongruenceSubgroups 2.1-6
IsCongruenceSubgroup 1.1 2.
IsCongruenceSubgroupGamma0 2.2-2
IsCongruenceSubgroupGamma1 2.2-4
IsCongruenceSubgroupGammaUpper0 2.2-3
IsCongruenceSubgroupGammaUpper1 2.2-5
IsFareySymbol 3.
IsFareySymbolDefaultRep 3.
IsIntersectionOfCongruenceSubgroups 2.2-6
IsPrincipalCongruenceSubgroup 2.2-1
IsSubset 2.4-4
IsValidFareySymbol 3.1-2
LabelsOfFareySymbol 3.2-4
LevelOfCongruenceSubgroup 2.3-1
MatrixByEvenInterval 4.2-1
MatrixByFreePairOfIntervals 4.2-3
MatrixByOddInterval 4.2-2
NumeratorOfGFSElement 3.2-2
PrincipalCongruenceSubgroup 2.1-1
Random 2.4-1
    one and two argument versions 2.4-1

Goto Chapter: Top 1 2 3 4 5 Bib Ind

generated by GAPDoc2HTML

congruence-1.2.5/doc/chooser.html000644 000766 000024 00000007456 14376366051 016773 0ustar00obk1staff000000 000000 GAPDoc Style Chooser

Setting preferences for GAPDoc manuals

Unfold subsections in menus only by mouse clicks: no (default)     yes

Show GAP examples as in sessions with ColorPrompt(true): yes (default)     no

Display side of table of contents within chapters: right (default)     left

Main document font: Helvetica/sans serif (default)     Times/serif

Paragraph formatting: left-right justified (default)     ragged right

Apply settings to last page.

congruence-1.2.5/lib/farey.gd000644 000766 000024 00000004477 14376366031 016064 0ustar00obk1staff000000 000000 ############################################################################# ## #W farey.gd The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## ############################################################################# ############################################################################# ## ## IsFareySymbol( ) ## DeclareCategory( "IsFareySymbol", IsObject ); ############################################################################# ## ## FareySymbolByData( , ) ## ## This constructor creates Farey symbol with the given generalized Farey ## sequence and list of labels. It also checks conditions from the definition ## of Farey symbol and returns an error if they are not satisfied ## DeclareOperation( "FareySymbolByData", [ IsList, IsList ] ); ############################################################################# ## ## GeneralizedFareySequence( ) ## LabelsOfFareySymbol( ) ## ## The data used to create the Farey symbol are stored as its attributes ## DeclareAttribute( "GeneralizedFareySequence", IsFareySymbol ); DeclareAttribute( "LabelsOfFareySymbol", IsFareySymbol ); ############################################################################# ## ## FareySymbol( ) ## ## For a subgroup of a finite index G, this attribute stores the ## corresponding Farey symbol. The algorithm for its computation must work ## with any matrix group for which the membership test is available ## DeclareAttribute( "FareySymbol", IsMatrixGroup ); ############################################################################# # # GeneratorsByFareySymbol( fs ) # DeclareGlobalFunction( "GeneratorsByFareySymbol" ); ############################################################################# # # IndexInPSL2ZByFareySymbol( fs ) # # By the proposition 7.2 [Kulkarni], for the Farey symbol with underlying # generalized Farey sequence { infinity, x0, x1, ..., xn, infinity }, the # index in PSL_2(Z) is given by the formula d = 3*n + e3, where e3 is the # number of odd intervals. # DeclareGlobalFunction( "IndexInPSL2ZByFareySymbol" ); ############################################################################# ## #E ## congruence-1.2.5/lib/cong.gi000644 000766 000024 00000074775 14376366031 015721 0ustar00obk1staff000000 000000 ############################################################################# ## #W cong.gi The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## ############################################################################# ############################################################################# ## ## Constructors of congruence subgroups InstallMethod( PrincipalCongruenceSubgroup, "for positive integer", [ IsPosInt ], function(n) local type, G; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, n, IsPrincipalCongruenceSubgroup, true, IsIntersectionOfCongruenceSubgroups, false, IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false, IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false, IsCongruenceSubgroupGammaMN, false ); return G; end); InstallMethod( CongruenceSubgroupGamma0, "for positive integer", [ IsPosInt ], function(n) local type, G; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, n, IsPrincipalCongruenceSubgroup, false, IsIntersectionOfCongruenceSubgroups, false, IsCongruenceSubgroupGamma0, true, IsCongruenceSubgroupGammaUpper0, false, IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false, IsCongruenceSubgroupGammaMN, false ); return G; end); InstallMethod( CongruenceSubgroupGammaUpper0, "for positive integer", [ IsPosInt ], function(n) local type, G; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, n, IsPrincipalCongruenceSubgroup, false, IsIntersectionOfCongruenceSubgroups, false, IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, true, IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false, IsCongruenceSubgroupGammaMN, false ); return G; end); InstallMethod( CongruenceSubgroupGamma1, "for positive integer", [ IsPosInt ], function(n) local type, G; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, n, IsPrincipalCongruenceSubgroup, false, IsIntersectionOfCongruenceSubgroups, false, IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false, IsCongruenceSubgroupGamma1, true, IsCongruenceSubgroupGammaUpper1, false, IsCongruenceSubgroupGammaMN, false ); return G; end); InstallMethod( CongruenceSubgroupGammaUpper1, "for positive integer", [ IsPosInt ], function(n) local type, G; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, n, IsPrincipalCongruenceSubgroup, false, IsIntersectionOfCongruenceSubgroups, false, IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false, IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, true, IsCongruenceSubgroupGammaMN, false ); return G; end); InstallMethod( CongruenceSubgroupGammaMN, "for two positive integers", [ IsPosInt, IsPosInt ], function(m,n) local type, G; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, m*n, LevelOfCongruenceSubgroupGammaMN, [m,n], IsPrincipalCongruenceSubgroup, false, IsIntersectionOfCongruenceSubgroups, false, IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false, IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false, IsCongruenceSubgroupGammaMN, true ); return G; end); InstallGlobalFunction( IntersectionOfCongruenceSubgroups, function( arg ) local type, G, H, K, T, arglist, n, i, pos; type := NewType( FamilyObj([[[1,0],[0,1]]]), IsGroup and IsAttributeStoringRep and IsFinitelyGeneratedGroup and IsMatrixGroup and IsCongruenceSubgroup); if not ForAll( arg, IsCongruenceSubgroup ) then Error("Usage : IntersectionOfCongruenceSubgroups( G1, G2, ... GN ) \n"); fi; # First we create a list arglist to eliminate evident repetitions of subgroups. # Then we eliminate evident inclusions of one subgroup into another: # - since intersection is associative, if we can intersect the group T which # is to be added with another subgroup K already contained in alglist, and # the result is one of the canonical congruence subgroups, we replace K by # the result of intersection of K and T # - we do not add a subgroup T to the list of defining subgroups, if alglist # already contains another subgroup K such that K is in T. # - if we add to alglist a subgroup T and alglist already contains one or more # subgroups K such that T is in K, we add T and remove all these K. arglist := []; for H in arg do if IsIntersectionOfCongruenceSubgroups(H) then for T in DefiningCongruenceSubgroups( H ) do pos:=PositionProperty( arglist, K -> CanReduceIntersectionOfCongruenceSubgroups( K, T ) ); if pos<>fail then arglist[pos]:=Intersection( arglist[pos], T ); else if ForAll( arglist, K -> not CanEasilyCompareCongruenceSubgroups( K, T ) ) and ForAll( arglist, K -> not IsSubgroup( T, K ) ) then for i in [ 1 .. Length(arglist) ] do if IsSubgroup( arglist[i], T ) then Unbind( arglist[i] ); fi; od; arglist := Compacted( arglist ); Add( arglist, T ); fi; fi; od; else pos:=PositionProperty( arglist, K -> CanReduceIntersectionOfCongruenceSubgroups( K, H ) ); if pos<>fail then arglist[pos]:=Intersection( arglist[pos], H ); else if ForAll( arglist, K -> not CanEasilyCompareCongruenceSubgroups( K, H ) ) and ForAll( arglist, K -> not IsSubgroup( H, K ) ) then for i in [ 1 .. Length(arglist) ] do if IsSubgroup( arglist[i], H ) then Unbind( arglist[i] ); fi; od; arglist := Compacted( arglist ); Add( arglist, H ); fi; fi; fi; od; # if the list of defining subgroups was reduced # to a single subgroup, we return this subgroup if Length( arglist ) = 1 then return arglist[1]; fi; # otherwise we sort the list of defining subgroups: # types of subgroups are sorted in the following way: # - IsCongruenceSubgroupGamma0 # - IsCongruenceSubgroupGammaUpper0 # - IsCongruenceSubgroupGamma1 # - IsCongruenceSubgroupGammaUpper1 # - IsPrincipalCongruenceSubgroup # and subgroups of the same type are sorted by ascending level Sort( arglist, function(X,Y) local f, t; f:=[IsCongruenceSubgroupGamma0,IsCongruenceSubgroupGammaUpper0,IsCongruenceSubgroupGamma1,IsCongruenceSubgroupGammaUpper1,IsPrincipalCongruenceSubgroup]; return PositionProperty(f, t -> t(X)) < PositionProperty(f, t -> t(Y)) or ( PositionProperty(f, t -> t(X)) = PositionProperty(f, t -> t(Y)) and LevelOfCongruenceSubgroup(X) < LevelOfCongruenceSubgroup(Y) ); end ); n := Lcm( List( arglist, H -> LevelOfCongruenceSubgroup(H) ) ); G := rec(); ObjectifyWithAttributes( G, type, DimensionOfMatrixGroup, 2, OneImmutable, [[1,0],[0,1]], IsIntegerMatrixGroup, true, IsFinite, false, LevelOfCongruenceSubgroup, n, IsPrincipalCongruenceSubgroup, false, IsIntersectionOfCongruenceSubgroups, true, IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false, IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false, DefiningCongruenceSubgroups, arglist ); return G; end); InstallMethod( DefiningCongruenceSubgroups, "for congruence subgroups", [ IsCongruenceSubgroup ], function(G) if not IsIntersectionOfCongruenceSubgroups(G) then return [G]; fi; end); ############################################################################# ## ## Methods for PrintObj and ViewObj for congruence subgroups InstallMethod( ViewObj, "for principal congruence subgroup", [ IsPrincipalCongruenceSubgroup ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for principal congruence subgroup", [ IsPrincipalCongruenceSubgroup ], 0, function( G ) Print( "PrincipalCongruenceSubgroup(", LevelOfCongruenceSubgroup(G), ")" ); end ); InstallMethod( ViewObj, "for CongruenceSubgroupGamma0 congruence subgroup", [ IsCongruenceSubgroupGamma0 ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for CongruenceSubgroupGamma0 congruence subgroup", [ IsCongruenceSubgroupGamma0 ], 0, function( G ) Print( "CongruenceSubgroupGamma0(", LevelOfCongruenceSubgroup(G), ")" ); end ); InstallMethod( ViewObj, "for CongruenceSubgroupGammaUpper0 congruence subgroup", [ IsCongruenceSubgroupGammaUpper0 ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for CongruenceSubgroupGammaUpper0 congruence subgroup", [ IsCongruenceSubgroupGammaUpper0 ], 0, function( G ) Print( "CongruenceSubgroupGammaUpper0(", LevelOfCongruenceSubgroup(G), ")" ); end ); InstallMethod( ViewObj, "for CongruenceSubgroupGamma1 congruence subgroup", [ IsCongruenceSubgroupGamma1 ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for CongruenceSubgroupGamma1 congruence subgroup", [ IsCongruenceSubgroupGamma1 ], 0, function( G ) Print( "CongruenceSubgroupGamma1(", LevelOfCongruenceSubgroup(G), ")" ); end ); InstallMethod( ViewObj, "for CongruenceSubgroupGammaUpper1 congruence subgroup", [ IsCongruenceSubgroupGammaUpper1 ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for CongruenceSubgroupGammaUpper1 congruence subgroup", [ IsCongruenceSubgroupGammaUpper1 ], 0, function( G ) Print( "CongruenceSubgroupGammaUpper1(", LevelOfCongruenceSubgroup(G), ")" ); end ); InstallMethod( ViewObj, "for CongruenceSubgroupGammaMN congruence subgroup", [ IsCongruenceSubgroupGammaMN ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for CongruenceSubgroupGammaMN congruence subgroup", [ IsCongruenceSubgroupGammaMN ], 0, function( G ) Print( "CongruenceSubgroupGammaMN(", LevelOfCongruenceSubgroupGammaMN(G)[1], ",", LevelOfCongruenceSubgroupGammaMN(G)[2], ")" ); end ); InstallMethod( ViewObj, "for intersection of congruence subgroups", [ IsIntersectionOfCongruenceSubgroups ], 0, function( G ) Print( "" ); end ); InstallMethod( PrintObj, "for intersection of congruence subgroups", [ IsIntersectionOfCongruenceSubgroups ], 0, function( G ) local i, k; k := Length(DefiningCongruenceSubgroups(G)); Print( "IntersectionOfCongruenceSubgroups( \n" ); for i in [ 1 .. k-1 ] do Print( " ", DefiningCongruenceSubgroups(G)[i], ", \n" ); od; Print( " ", DefiningCongruenceSubgroups(G)[k], " )" ); end ); ############################################################################# ## ## Membership tests for congruence subgroups InstallMethod( \in, "for a 2x2 matrix and a principal congruence subgroup", [ IsMatrix, IsPrincipalCongruenceSubgroup], 0, function( m, G ) local n; if not DimensionsMat( m ) = [2,2] then return false; elif DeterminantMat(m)<>1 then return false; else n := LevelOfCongruenceSubgroup(G); return IsInt( (m[1][1]-1)/n ) and IsInt(m[1][2]/n) and IsInt(m[2][1]/n) and IsInt( (m[2][2]-1)/n ); fi; end); InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGamma0", [ IsMatrix, IsCongruenceSubgroupGamma0 ], 0, function( m, G ) local n; if not DimensionsMat( m ) = [2,2] then return false; elif DeterminantMat(m)<>1 then return false; else n := LevelOfCongruenceSubgroup(G); return IsInt(m[2][1]/n); fi; end); InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGammaUpper0", [ IsMatrix, IsCongruenceSubgroupGammaUpper0 ], 0, function( m, G ) local n; if not DimensionsMat( m ) = [2,2] then return false; elif DeterminantMat(m)<>1 then return false; else n := LevelOfCongruenceSubgroup(G); return IsInt(m[1][2]/n); fi; end); InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGamma1", [ IsMatrix, IsCongruenceSubgroupGamma1 ], 0, function( m, G ) local n; if not DimensionsMat( m ) = [2,2] then return false; elif DeterminantMat(m)<>1 then return false; else n := LevelOfCongruenceSubgroup(G); return IsInt( (m[1][1]-1)/n ) and IsInt( m[2][1]/n ) and IsInt( (m[2][2]-1)/n ); fi; end); InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGammaUpper1", [ IsMatrix, IsCongruenceSubgroupGammaUpper1 ], 0, function( m, G ) local n; if not DimensionsMat( m ) = [2,2] then return false; elif DeterminantMat(m)<>1 then return false; else n := LevelOfCongruenceSubgroup(G); return IsInt( (m[1][1]-1)/n ) and IsInt( m[1][2]/n ) and IsInt( (m[2][2]-1)/n ); fi; end); InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGammaMN", [ IsMatrix, IsCongruenceSubgroupGammaMN ], 0, function( mat, G ) local m, n; if not DimensionsMat( mat ) = [2,2] then return false; elif DeterminantMat(mat)<>1 then return false; else m := LevelOfCongruenceSubgroupGammaMN(G)[1]; n := LevelOfCongruenceSubgroupGammaMN(G)[2]; return IsInt( (mat[1][1]-1)/m ) and IsInt(mat[1][2]/m) and IsInt(mat[2][1]/n) and IsInt( (mat[2][2]-1)/n ); fi; end); InstallMethod( \in, "for an intersection of congruence subgroups", [ IsMatrix, IsIntersectionOfCongruenceSubgroups ], 0, function( m, G ) local H; if not DimensionsMat( m ) = [2,2] then return false; elif DeterminantMat(m)<>1 then return false; else return ForAll( DefiningCongruenceSubgroups(G), H -> m in H ); fi; end); ############################################################################# ## ## Installing special methods for congruence subgroups ## for some general methods installed in GAP for matrix groups InstallMethod( DimensionOfMatrixGroup, "for congruence subgroup", [ IsCongruenceSubgroup ], 0, G -> 2 ); InstallMethod( \=, "for a pair of congruence subgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ], 0, function( G, H ) if CanEasilyCompareCongruenceSubgroups( G, H ) then return true; else TryNextMethod(); fi; end); ############################################################################# ## ## IsSubset ## ############################################################################# InstallMethod( IsSubset, "for a natural SL_2(Z) and a congruence subgroup", [ IsNaturalSL, IsCongruenceSubgroup ], 0, function( G, H ) return MultiplicativeNeutralElement(G)=[ [ 1, 0 ], [ 0, 1 ] ]; end); InstallMethod( IsSubset, "for a congruence subgroup and a principal congruence subgroup", [ IsCongruenceSubgroup, IsPrincipalCongruenceSubgroup ], 0, function( G, H ) local T; if IsIntersectionOfCongruenceSubgroups(G) then return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(G) then return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup TryNextMethod(); fi; end); InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGamma1", [ IsCongruenceSubgroup, IsCongruenceSubgroupGamma1 ], 0, function( G, H ) local T; if IsIntersectionOfCongruenceSubgroups(G) then return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGammaUpper0(G) then return false; elif IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGamma0(G) then return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup TryNextMethod(); fi; end); InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGammaUpper1", [ IsCongruenceSubgroup, IsCongruenceSubgroupGammaUpper1 ], 0, function( G, H ) local T; if IsIntersectionOfCongruenceSubgroups(G) then return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGamma0(G) then return false; elif IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGammaUpper0(G) then return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup TryNextMethod(); fi; end); InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGamma0", [ IsCongruenceSubgroup, IsCongruenceSubgroupGamma0 ], 0, function( G, H ) local T; if IsIntersectionOfCongruenceSubgroups(G) then return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGammaUpper0(G) then return false; elif IsCongruenceSubgroupGamma0(G) then return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup TryNextMethod(); fi; end); InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGammaUpper0", [ IsCongruenceSubgroup, IsCongruenceSubgroupGammaUpper0 ], 0, function( G, H ) local T; if IsIntersectionOfCongruenceSubgroups(G) then return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGamma0(G) then return false; elif IsCongruenceSubgroupGammaUpper0(G) then return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup TryNextMethod(); fi; end); InstallMethod( IsSubset, "for a congruence subgroup and intersection of congruence subgroups", [ IsCongruenceSubgroup, IsIntersectionOfCongruenceSubgroups ], 0, function( G, H ) local DG, DH; # here we can check only sufficient conditions, and they are not # satisfied, then we call the next method if IsIntersectionOfCongruenceSubgroups(G) then if ForAll( DefiningCongruenceSubgroups(H), DH -> ForAll( DefiningCongruenceSubgroups(G), DG -> IsSubset(G,DH) ) ) then return true; else TryNextMethod(); fi; elif IsPrincipalCongruenceSubgroup(G) or IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(G) then if ForAll( DefiningCongruenceSubgroups(H), DH -> IsSubset(G,DH) ) then return true; else TryNextMethod(); fi; else # for a case of another type of congruence subgroup TryNextMethod(); fi; end); ############################################################################# ## ## Intersection2 ## ############################################################################# InstallMethod( Intersection2, "for a pair of congruence subgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ], 0, function( G, H ) # # Case 1 - at least one subgroup is an intersection of congruence subgroups # if IsIntersectionOfCongruenceSubgroups(G) or IsIntersectionOfCongruenceSubgroups(H) then return IntersectionOfCongruenceSubgroups(G,H); # # Case 2 - the diagonal (both subgroups has the same type) # elif IsPrincipalCongruenceSubgroup(G) and IsPrincipalCongruenceSubgroup(H) then return PrincipalCongruenceSubgroup( Lcm( LevelOfCongruenceSubgroup(G), LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma1(H) then return CongruenceSubgroupGamma1( Lcm( LevelOfCongruenceSubgroup(G), LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper1(H) then return CongruenceSubgroupGammaUpper1( Lcm( LevelOfCongruenceSubgroup(G), LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma0(H) then return CongruenceSubgroupGamma0( Lcm( LevelOfCongruenceSubgroup(G), LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGammaUpper0(H) then return CongruenceSubgroupGammaUpper0( Lcm( LevelOfCongruenceSubgroup(G), LevelOfCongruenceSubgroup(H) ) ); # # Case 3 - Subgroups has different level # elif LevelOfCongruenceSubgroup(G) <> LevelOfCongruenceSubgroup(H) then return IntersectionOfCongruenceSubgroups(G,H); # # Now subgroups have the same level # elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma0(H) then return G; # so all properties and attributes of G will be preserved elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma1(H) then return H; elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper0(H) then return G; elif IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGammaUpper1(H) then return H; elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGammaUpper0(H) or IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGamma0(H) then return IntersectionOfCongruenceSubgroups(G,H); else return PrincipalCongruenceSubgroup(LevelOfCongruenceSubgroup(G)); fi; end); ############################################################################# ## ## Indices of congruence subgroups ## ############################################################################# InstallMethod( Index, "for a natural SL_2(Z) and a congruence subgroup", [ IsNaturalSL, IsCongruenceSubgroup ], 0, function( G, H ) local n, prdiv, r, p; n := LevelOfCongruenceSubgroup(H); if HasIsPrincipalCongruenceSubgroup( H ) and IsPrincipalCongruenceSubgroup( H ) then if n=1 then Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = 1 ); return 1; elif n=2 then Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = 6 ); return 12; # not 6, since we are in SL, not in PSL else prdiv := Set( Factors( n ) ); r := n^3; # not (n^3)/2 since we are in SL, not in PSL for p in prdiv do r := r*(1-1/p^2); od; Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = r/2 ); return r; fi; elif ( HasIsCongruenceSubgroupGamma0( H ) and IsCongruenceSubgroupGamma0( H ) ) or ( HasIsCongruenceSubgroupGammaUpper0( H ) and IsCongruenceSubgroupGammaUpper0( H ) ) then # for CongruenceSubgroupGamma0 we use the formula # [ SL_2(Z) : CongruenceSubgroupGamma0(n) ] = n * "Product over prime p | n" ( 1 + 1/p ) prdiv := Set( Factors( n ) ); r := n; for p in prdiv do r := r*(1+1/p); od; Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = r ); return r; elif ( HasIsCongruenceSubgroupGamma1( H ) and IsCongruenceSubgroupGamma1( H ) ) or ( HasIsCongruenceSubgroupGammaUpper1( H ) and IsCongruenceSubgroupGammaUpper1( H ) ) then # for CongruenceSubgroupGamma1 we use the formula # [ CongruenceSubgroupGamma0(n) : CongruenceSubgroupGamma1(n) ] = n * "Product over prime p | n" ( 1 - 1/p ) # Combining with the previous case, we get that # [ SL_2(Z) : CongruenceSubgroupGamma1(n) ] = n^2 * "Product over prime p | n" ( 1 - 1/p^2 ) prdiv := Set( Factors( n ) ); r := n^2; for p in prdiv do r := r*(1-1/p^2); od; Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = r/2 ); return r; else # if H is not in any of the cases above, for example is an intersection # of some congruence subgroups, we derive the index from its Farey symbol if [[-1,0],[0,-1]] in H then return IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) ; else return IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) * 2; fi; fi; end); InstallMethod( IndexInSL2Z, "for a congruence subgroup", [ IsCongruenceSubgroup ], 0, G -> Index( SL(2,Integers), G ) ); InstallMethod( Index, "for a pair of congruence subgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ], 0, function( G, H ) if IsSubgroup( G, H ) then return IndexInSL2Z(H)/IndexInSL2Z(G); fi; end); ############################################################################# ## ## Generators of confruence subgroups from Farey symbols ## ############################################################################# InstallMethod( GeneratorsOfGroup, "for a congruence subgroup", [ IsCongruenceSubgroup ], 0, function(G) local gens, i; Info( InfoCongruence, 1, "Using the Congruence package for GeneratorsOfGroup ..."); gens := GeneratorsByFareySymbol( FareySymbol( G ) ); for i in [ 1 .. Length(gens) ] do if not gens[i] in G then gens[i] := -gens[i]; Assert( 1, gens[i] in G ); fi; od; return gens; end ); ############################################################################# ## #E ## congruence-1.2.5/lib/random.gi000644 000766 000024 00000016441 14376366031 016235 0ustar00obk1staff000000 000000 ############################################################################# ## #W random.gi The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## ############################################################################# ## ## This file contains implementations of methods to construct random elements ## of congruence subgroups CongruenceSubgroupGamma, CongruenceSubgroupGamma0, ## CongruenceSubgroupGammaUpper0, CongruenceSubgroupGamma1 and ## CongruenceSubgroupGammaUpper1. ## The idea is to select two random entries a and b in the same row or column ## of the matrix, such that a and b will satisfy the requirements arising ## from the congruence subgroup. For example, for the principal congruence ## subgroup we will select a and b as follows: ## a := 1 + n * Random( [ -10 .. 10 ] ); ## b := n * Random( [ -10 .. 10 ] ); ## After this we can find such x and y for the other row (or column) of the ## matrix that its determinant will be equal to one. If the resulting matrix ## will be not in the congruence subgroup because of not suitable x and y, ## we will repeat this process for another a and b until we will find ## suitable x and y. ## For each type of congruence subgroups, we provide one- and two-argument ## versions of Random. The one-argument version uses Random( [ -10 .. 10 ] ) ## to generate a and b, ## and in the two-argument version Random([ -m..m ]) ## will be used, where m is given by the second argument. ############################################################################# ## ## The principal congruence subgroup of level N consists of all matrices ## of the form [ 1+N N ] ## [ N 1+N ] ## InstallMethod( Random, "for a principal congruence subgroup", [ IsPrincipalCongruenceSubgroup ], 0, function( G ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := 1 + n * Random( [ -10 .. 10 ] ); b := n * Random( [ -10 .. 10 ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1 and IsInt( -gcd.coeff2/n ) and IsInt( (gcd.coeff1-1)/n ); return [ [ a, b ], [ -gcd.coeff2, gcd.coeff1 ] ]; end); InstallOtherMethod( Random, "for a principal congruence subgroup", [ IsPrincipalCongruenceSubgroup, IsPosInt ], 0, function( G, m ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := 1 + n * Random( [ -m .. m ] ); b := n * Random( [ -m .. m ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1 and IsInt( -gcd.coeff2/n ) and IsInt( (gcd.coeff1-1)/n ); return [ [ a, b ], [ -gcd.coeff2, gcd.coeff1 ] ]; end); ############################################################################# ## ## The congruence subgroup CongruenceSubgroupGamma0(N) consists of all matrices ## of the form [ * * ] ## [ N * ] ## InstallMethod( Random, "for a congruence subgroup CongruenceSubgroupGamma0", [ IsCongruenceSubgroupGamma0 ], 0, function( G ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := Random( [ -n*10 .. n*10 ] ); b := n * Random( [ -10 .. 10 ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1; return [ [ a, -gcd.coeff2 ], [ b, gcd.coeff1 ] ]; end); InstallOtherMethod( Random, "for a congruence subgroup CongruenceSubgroupGamma0", [ IsCongruenceSubgroupGamma0, IsPosInt ], 0, function( G, m ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := Random( [ -n*m .. n*m ] ); b := n * Random( [ -m .. m ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1; return [ [ a, -gcd.coeff2 ], [ b, gcd.coeff1 ] ]; end); ############################################################################# ## ## The congruence subgroup CongruenceSubgroupGammaUpper0(N) consists of all matrices ## of the form [ * N ] ## [ * * ] ## InstallMethod( Random, "for a congruence subgroup CongruenceSubgroupGammaUpper0", [ IsCongruenceSubgroupGammaUpper0 ], 0, function( G ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := Random( [ -n*10 .. n*10 ] ); b := n * Random( [ -10 .. 10 ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1; return [ [ a, b ], [ -gcd.coeff2, gcd.coeff1 ] ]; end); InstallOtherMethod( Random, "for a congruence subgroup CongruenceSubgroupGammaUpper0", [ IsCongruenceSubgroupGammaUpper0, IsPosInt ], 0, function( G, m ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := Random( [ -n*m .. n*m ] ); b := n * Random( [ -m .. m ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1; return [ [ a, b ], [ -gcd.coeff2, gcd.coeff1 ] ]; end); ############################################################################# ## ## The congruence subgroup CongruenceSubgroupGamma1(N) consists of all matrices ## of the form [ 1+N * ] ## [ N 1+N ] ## InstallMethod( Random, "for a congruence subgroup CongruenceSubgroupGamma1", [ IsCongruenceSubgroupGamma1 ], 0, function( G ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := 1 + n * Random( [ -10 .. 10 ] ); b := n * Random( [ -10 .. 10 ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1 and IsInt( (gcd.coeff1-1)/n ); return [ [ a, -gcd.coeff2 ], [ b, gcd.coeff1 ] ]; end); InstallOtherMethod( Random, "for a congruence subgroup CongruenceSubgroupGamma1", [ IsCongruenceSubgroupGamma1, IsPosInt ], 0, function( G, m ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := 1 + n * Random( [ -m .. m ] ); b := n * Random( [ -m .. m ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1 and IsInt( (gcd.coeff1-1)/n ); return [ [ a, -gcd.coeff2 ], [ b, gcd.coeff1 ] ]; end); ############################################################################# ## ## The congruence subgroup CongruenceSubgroupGammaUpper1(N) consists of all matrices ## of the form [ 1+N N ] ## [ * 1+N ] ## InstallMethod( Random, "for a congruence subgroup CongruenceSubgroupGammaUpper1", [ IsCongruenceSubgroupGammaUpper1 ], 0, function( G ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := 1 + n * Random( [ -10 .. 10 ] ); b := n * Random( [ -10 .. 10 ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1 and IsInt( (gcd.coeff1-1)/n ); return [ [ a, b ], [ -gcd.coeff2, gcd.coeff1 ] ]; end); InstallOtherMethod( Random, "for a congruence subgroup CongruenceSubgroupGammaUpper1", [ IsCongruenceSubgroupGammaUpper1, IsPosInt ], 0, function( G, m ) local n, a, b, gcd; n := LevelOfCongruenceSubgroup( G ); repeat a := 1 + n * Random( [ -m .. m ] ); b := n * Random( [ -m .. m ] ); gcd := Gcdex( a, b ); until gcd.gcd = 1 and IsInt( (gcd.coeff1-1)/n ); return [ [ a, b ], [ -gcd.coeff2, gcd.coeff1 ] ]; end); ############################################################################# ## #E ##congruence-1.2.5/lib/factor.g000644 000766 000024 00000017347 14376366031 016070 0ustar00obk1staff000000 000000 ############################################################################# ## #W factor.gi The Congruence package Helena Verrill ## ## ############################################################################# # it will be useful to find the maximum value of the labels # though if space is not a problem, this could just return # the Length of the labels. __congruence_max_label:= function(L) local s, i; s:=1; for i in [1..Length(L)] do if (not L[i] = "even") and (not L[i] = "odd") and L[i] > s then s := L[i]; fi; od; return s; end;; # For a list of labels L such as # [1,3,4,7,4,7,3,1,"odd","even"], for reference, indices are: # 1 2 3 4 5 6 7 8 9 10 # want to produce a list: # [[9],[10],[1,8],[],[2,7],[3,5],...] # this is the list of the form: # [[all indices with L[x] = "odd"],[all indices with L[x] = "even"], # [all indices with L[x] = 1], ....] # assume L is a list of integers, or "odd" or "even". __congruence_edgepairs := function(L) local max, pairs, i; pairs:=[]; max:=__congruence_max_label(L); for i in [1..max+2] do pairs[i] := []; od; for i in [1..Length(L)] do if L[i]="odd" then Add(pairs[1],i); elif L[i]="even" then Add(pairs[2],i); else Add(pairs[L[i]+2],i); fi; od; return pairs; end;; # for each edge of a Farey Symbol, we compute the generator # which maps that edge to another edge. # (this is done at the same time as the fundamental # domain is computed, but the data may not have been stored, # and has to be recomputed; suggest change for a future version) # this function gives "edge gluing matrices" as a number in the # list of generators (gens); negative entries mean the inverse matrix, # e.g., -5 would mean (5th generator)^(-1) # (note, the list of labels in a Farey sequence says which edge is # glued to which; -2 and -3 means there is an elliptic point order # 2 or 3) # # the input is assumed to be a FareySymbol; # another version of this function could take input to be the group # # Note, if the output of this function was # stored as an attribute of the FareySymbol, # then it would not have to be recomputed # __congruence_gluing_matrices := function(FS) local cusps, gens, label_list, glue_list, l, i, index, gfs, labels, matrix; # the following is a list of the cusps of the sequence, # and other data extracted from the FareySymbol gfs := GeneralizedFareySequence(FS); labels := LabelsOfFareySymbol(FS); gens := GeneratorsByFareySymbol( FS ); # make a list of which edges have a given label: label_list := __congruence_edgepairs(labels); # the following list will be what is finally returned, # a list of integers as described above. glue_list := []; # make list of which generator joins two edges, # in the non elliptic case for i in [3..Length(label_list)] do l := label_list[i]; matrix := MatrixByFreePairOfIntervals( gfs, l[1], l[2] ); index := PositionNthOccurrence( gens ,matrix,1); if index = "fail" then index := -PositionNthOccurrence(gens,matrix^(-1),1); fi; glue_list[l[1]] := index; glue_list[l[2]] := -index; od; # Now deal with elliptic elements: for i in label_list[1] do matrix := MatrixByOddInterval( gfs, i ); index := PositionNthOccurrence(gens,matrix,1); if index = "fail" then index := -PositionNthOccurrence(gens,matrix^(-1),1); glue_list[i] := -index; else glue_list[i] := -index; fi; od; for i in label_list[2] do matrix := MatrixByEvenInterval( gfs, i ); index := PositionNthOccurrence(gens,matrix,1); if index = "fail" then index := -PositionNthOccurrence(gens,matrix^(-1),1); glue_list[i] := -index; else glue_list[i] := -index; fi; od; return glue_list; end;; # following function determines which edge an image ImL of # a domain is the longest # # The function either returns a index of an edge # which is a number between 1 and #L-1, # or it returns "overlap" meaning that there is overlap, but not equality. __congruence_longest_edge := function(ImL) local i, minImL, maxImL, maxindex, minindex; for i in [1..Length(ImL)] do if ImL[i] = infinity then return "infinity"; fi; od; minImL := Minimum(ImL); maxImL := Maximum(ImL); maxindex := PositionNthOccurrence( ImL ,maxImL,1); return maxindex; end;; # Need to be able to apply action of matrices to cusps __congruence_fractionallineartransformation:= function(g,c) local den, num; if c = infinity then if g[2][1] = 0 then return infinity; else return g[1][1]/g[2][1]; fi; else num:=g[1][1]*c + g[1][2]; den:=g[2][1]*c + g[2][2]; if den = 0 then return infinity; else return num/den; fi; fi; end;; __congruence_PSL2multiply := function(g,L) local imL, i; imL := []; for i in [1..Length(L)] do Add(imL,__congruence_fractionallineartransformation(g,L[i])); od; return imL; end;; # this an algorithm to determine a word for # a given matrix g in G in terms of the generators: find_word_ver2 := function(FS,glue_list,g) local gens, L, ImL, done, word,letter,i, edge, h, maybesame, inf; gens := GeneratorsByFareySymbol( FS ); L := GeneralizedFareySequence( FS ); ImL := __congruence_PSL2multiply(g,L); word:=[]; h := g; done := false; while not done do; edge := __congruence_longest_edge(ImL); if edge = "infinity" then # check equality of L and ImL: maybesame := true; i := 1; while i < Length(L) and maybesame do if not L[i] = ImL[i] then maybesame := false; fi; i := i+1; od; if maybesame then done := true; return Reversed(word); fi; # now assume the domains are not equal inf := PositionNthOccurrence( ImL , infinity ,1); if inf = 1 and ImL[2]L[2] then return "g is not in the group"; elif ImL[i+1]L[2] then return "g is not in the group"; fi; # now assume the domains do not overlap if ImL[inf+1] >= L[2] then letter := glue_list[inf]; elif inf = 1 then letter := glue_list[Length(glue_list)]; else letter := glue_list[inf-1]; fi; Add(word,letter); h:=h*gens[AbsoluteValue(letter)]^(-SignInt(letter)); ImL := __congruence_PSL2multiply(h,L); else # get next "letter" in the word for the matrix: letter := glue_list[edge]; Add(word,letter); h:=h*gens[AbsoluteValue(letter)]^(-SignInt(letter)); ImL := __congruence_PSL2multiply(h,L); fi; od; return Reversed(word); end;; ############################################################################# # # FactorizeMat( G, g ) # __congruence_FactorizeMat := function( G, g ) return find_word_ver2( FareySymbol(G), __congruence_gluing_matrices(FareySymbol(G)), g ); end; ############################################################################# # # CheckFactorizeMat(gens,word) # # the following function is for testing purposes: # gens is a list of generators, "word" a sequence of integers, none # of which is bigger than the size of the list of generators. # a word [4,6,-3] will return the product gens[4]*gens[6]*gens[3]^(-1) # __congruence_CheckFactorizeMat := function(gens,word) local g, i; g := [[1,0],[0,1]]; for i in word do g := g*gens[AbsoluteValue(i)]^SignInt(i); od; return g; end;congruence-1.2.5/lib/cong.g000644 000766 000024 00000017463 14376366031 015537 0ustar00obk1staff000000 000000 ############################################################################# ## #W cong.g The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## ############################################################################# ############################################################################# # # CanEasilyCompareCongruenceSubgroups( G, H ) # InstallMethod( CanEasilyCompareCongruenceSubgroups, "for two congruence subgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ], function ( G, H ) local i; if ForAll( [ G, H ], IsPrincipalCongruenceSubgroup ) or ForAll( [ G, H ], IsCongruenceSubgroupGamma0 ) or ForAll( [ G, H ], IsCongruenceSubgroupGammaUpper0 ) or ForAll( [ G, H ], IsCongruenceSubgroupGamma1 ) or ForAll( [ G, H ], IsCongruenceSubgroupGammaUpper1 ) then return LevelOfCongruenceSubgroup(G)=LevelOfCongruenceSubgroup(H); elif ForAll( [ G, H ], IsIntersectionOfCongruenceSubgroups ) then # we use the canonical ordering of subgroups # in the intersection of congruence subgroups if Length(DefiningCongruenceSubgroups(G)) <> Length(DefiningCongruenceSubgroups(H)) then return false; else return ForAll( [ 1 .. Length(DefiningCongruenceSubgroups(G)) ], i -> CanEasilyCompareCongruenceSubgroups( DefiningCongruenceSubgroups(G)[i], DefiningCongruenceSubgroups(H)[i]) ); fi; else return false; fi; end); ############################################################################# # # CanReduceIntersectionOfCongruenceSubgroups( G, H ) # # This function mimics the structure of the method for Intersection for # congruence subgroups. It returns true, if their intersection can be reduced # to one of the canonical congruence subgroups, and false otherwise, i.e. the # intersection can be expressed only as IntersectionOfCongruenceSubgroups. # This is used in IntersectionOfCongruenceSubgroups to reduce the list of # canonical subgroups forming the intersection. # InstallMethod( CanReduceIntersectionOfCongruenceSubgroups, "for two congruence subgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ], function( G, H ) # # Case 1 - at least one subgroup is an intersection of congruence subgroups # if IsIntersectionOfCongruenceSubgroups(G) or IsIntersectionOfCongruenceSubgroups(H) then return false; # # Case 2 - the diagonal (both subgroups has the same type) # elif IsPrincipalCongruenceSubgroup(G) and IsPrincipalCongruenceSubgroup(H) then return true; elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma1(H) then return true; elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper1(H) then return true; elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma0(H) then return true; elif IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGammaUpper0(H) then return true; # # Case 3 - Subgroups has different level # elif LevelOfCongruenceSubgroup(G) <> LevelOfCongruenceSubgroup(H) then return false; # # Now subgroups have the same level # elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma0(H) then return true; elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma1(H) then return true; elif IsCongruenceSubgroupGammaUpper1(G) and IsCongruenceSubgroupGammaUpper0(H) then return true; elif IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGammaUpper1(H) then return true; elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGammaUpper0(H) or IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGamma0(H) then return false; else return true; fi; end); ############################################################################# # # NumeratorOfGFSElement( gfs, i ) # # Returns the numerator of the i-th term of the generalised Farey sequence # gfs: for the 1st infinite entry returns -1, for the last one returns 1, # for all other entries returns usual numerator. # InstallGlobalFunction( "NumeratorOfGFSElement", function(gfs,i) if i in [ 2 .. Length(gfs)-1 ] then return NumeratorRat( gfs[i] ); elif i=1 then return -1; # infinity on the left elif i=Length(gfs) then return 1; # infinity on the right else Error("There is no entry number ", i, " in !!! \n"); fi; end); ############################################################################# # # DenominatorOfGFSElement( gfs, i ) # # Returns the denominator of the i-th term of the generalised Farey sequence # gfs: for both infinite entries returns 0, for the other ones returns usual # denominator. # InstallGlobalFunction( "DenominatorOfGFSElement", function(gfs,i) if i in [ 2 .. Length(gfs)-1 ] then return DenominatorRat( gfs[i] ); elif i=1 or i=Length(gfs) then return 0; else Error("There is no entry number ", i, " in !!! \n"); fi; end); ############################################################################# # # IsValidFareySymbol( fs ) # # This function is used in FareySymbolByData to validate its output # InstallGlobalFunction( "IsValidFareySymbol" , function( fs ) local gfs, labels, n, i, t; gfs := GeneralizedFareySequence(fs); labels := LabelsOfFareySymbol(fs); n := Length(gfs); if ForAny( [ 1 .. Length(labels) ], t -> not IsBound(labels[t] ) ) then Error(" must not contain holes !!! \n"); fi; if Length(labels)<>n-1 then Error("Lengths of and do not match !!! \n"); fi; if gfs[1]<>infinity or gfs[n]<>infinity then Error("First and last elements of must be infinity !!! \n"); fi; if not 0 in gfs then Error(" must contain at least one zero element !!! \n"); fi; for i in [ 1 .. n-1 ] do if NumeratorOfGFSElement(gfs,i+1) * DenominatorOfGFSElement(gfs,i) - NumeratorOfGFSElement(gfs,i) * DenominatorOfGFSElement(gfs,i+1) <> 1 then Error("a", i+1, "*b", i, " - a", i, "*b", i+1, " <> 1 !!! \n"); fi; od; if ForAny( Collected(labels), t -> IsInt(t[1]) and t[2]<>2 ) then Error(" are not properly paired !!! \n"); fi; return true; end); ############################################################################# # # MatrixByEvenInterval( gfs, i ) # InstallGlobalFunction( "MatrixByEvenInterval", function(gfs,i) local ai, bi, ai1, bi1; ai := NumeratorOfGFSElement(gfs,i); bi := DenominatorOfGFSElement(gfs,i); ai1 := NumeratorOfGFSElement(gfs,i+1); bi1 := DenominatorOfGFSElement(gfs,i+1); return [ [ ai1*bi1 + ai*bi, -ai^2 - ai1^2 ], [ bi^2 + bi1^2, -ai1*bi1 - ai*bi ] ]; end); ############################################################################# # # MatrixByOddInterval( gfs, i ) # InstallGlobalFunction( "MatrixByOddInterval", function(gfs,j) local aj, bj, aj1, bj1; aj := NumeratorOfGFSElement(gfs,j); bj := DenominatorOfGFSElement(gfs,j); aj1 := NumeratorOfGFSElement(gfs,j+1); bj1 := DenominatorOfGFSElement(gfs,j+1); return [ [ aj1*bj1 + aj*bj1 + aj*bj, -aj^2 - aj*aj1 - aj1^2 ], [ bj^2 + bj*bj1 + bj1^2, -aj1*bj1 - aj1*bj - aj*bj ] ]; end); ############################################################################# # # MatrixByFreePairOfIntervals( gfs, k, kp ) # InstallGlobalFunction( "MatrixByFreePairOfIntervals", function(gfs,k,kp) local ak, bk, ak1, bk1, akp, bkp, akp1, bkp1; ak := NumeratorOfGFSElement(gfs,k); bk := DenominatorOfGFSElement(gfs,k); ak1 := NumeratorOfGFSElement(gfs,k+1); bk1 := DenominatorOfGFSElement(gfs,k+1); akp := NumeratorOfGFSElement(gfs,kp); bkp := DenominatorOfGFSElement(gfs,kp); akp1 := NumeratorOfGFSElement(gfs,kp+1); bkp1 := DenominatorOfGFSElement(gfs,kp+1); return [ [ akp1*bk1 + akp*bk, -akp*ak - akp1*ak1 ], [ bkp*bk + bkp1*bk1, -ak1*bkp1 - ak*bkp ] ]; end); ############################################################################# ## #E ## congruence-1.2.5/lib/cong.gd000644 000766 000024 00000022357 14376366031 015701 0ustar00obk1staff000000 000000 ############################################################################# ## #W cong.gd The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## ############################################################################# ############################################################################# ## ## InfoCongruence ## ## We declare new Info class for algorithms from the Congruence package. It ## has 3 levels - 0, 1 and 2. Default level is 1, and it is used to display ## messages when the package is used to replace existing GAP methods. ## To change Info level to k, use command SetInfoLevel(InfoCongruence, k) DeclareInfoClass("InfoCongruence"); ############################################################################# ## ## IsCongruenceSubgroup( ) ## ## We create category of congruence subgroups as a subcategory of matrix ## groups, and declare properties that are used to distinguish several ## important classes of congruence subgroups DeclareCategory( "IsCongruenceSubgroup", IsMatrixGroup ); ############################################################################# ## ## IsPrincipalCongruenceSubgroup( ) ## ## The principal congruence subgroup of level N consists of all matrices ## of the form [ 1+N N ] ## [ N 1+N ] ## DeclareProperty( "IsPrincipalCongruenceSubgroup", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsPrincipalCongruenceSubgroup); ############################################################################# ## ## IsCongruenceSubgroupGamma0( ) ## ## The congruence subgroup CongruenceSubgroupGamma0(N) consists of all matrices ## of the form [ * * ] ## [ N * ] ## DeclareProperty( "IsCongruenceSubgroupGamma0", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsCongruenceSubgroupGamma0); ############################################################################# ## ## IsCongruenceSubgroupGammaUpper0( ) ## ## The congruence subgroup CongruenceSubgroupGammaUpper0(N) consists of all matrices ## of the form [ * N ] ## [ * * ] ## DeclareProperty( "IsCongruenceSubgroupGammaUpper0", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsCongruenceSubgroupGammaUpper0); ############################################################################# ## ## IsCongruenceSubgroupGamma1( ) ## ## The congruence subgroup CongruenceSubgroupGamma1(N) consists of all matrices ## of the form [ 1+N * ] ## [ N 1+N ] ## DeclareProperty( "IsCongruenceSubgroupGamma1", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsCongruenceSubgroupGamma1); ############################################################################# ## ## IsCongruenceSubgroupGammaUpper1( ) ## ## The congruence subgroup CongruenceSubgroupGammaUpper1(N) consists of all matrices ## of the form [ 1+N N ] ## [ * 1+N ] ## DeclareProperty( "IsCongruenceSubgroupGammaUpper1", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsCongruenceSubgroupGammaUpper1); ############################################################################# ## ## IsCongruenceSubgroupGammaMN( ) ## ## The congruence subgroup CongruenceSubgroupGammaMN(M,N) consists of all matrices ## of the form [ 1+M M ] ## [ N 1+N ] ## DeclareProperty( "IsCongruenceSubgroupGammaMN", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsCongruenceSubgroupGammaMN); ############################################################################# ## ## IsIntersectionOfCongruenceSubgroups( ) ## ## This property will be uses for subgroups of SL_2(Z) that were constructed ## as intersection of a finite number of congruence subgroups of types ## CongruenceSubgroupGamma, CongruenceSubgroupGamma_0, ## CongruenceSubgroupGamma^0, CongruenceSubgroupGamma_1, ## CongruenceSubgroupGamma^1 and CongruenceSubgroupGammaMN ## DeclareProperty( "IsIntersectionOfCongruenceSubgroups", IsCongruenceSubgroup ); InstallTrueMethod(IsCongruenceSubgroup, IsIntersectionOfCongruenceSubgroups); ############################################################################# ## ## PrincipalCongruenceSubgroup( n ) ## CongruenceSubgroupGamma0( n ) ## CongruenceSubgroupGammaUpper0( n ) ## CongruenceSubgroupGamma1( n ) ## CongruenceSubgroupGammaUpper1( n ) ## CongruenceSubgroupGammaMN( m, n ) ## ## Declaration of global functions - constructors of congruence subgroups ## DeclareOperation("PrincipalCongruenceSubgroup", [IsPosInt]); DeclareOperation("CongruenceSubgroupGamma0", [IsPosInt]); DeclareOperation("CongruenceSubgroupGammaUpper0", [IsPosInt]); DeclareOperation("CongruenceSubgroupGamma1", [IsPosInt]); DeclareOperation("CongruenceSubgroupGammaUpper1", [IsPosInt]); DeclareOperation("CongruenceSubgroupGammaMN", [IsPosInt,IsPosInt]); ############################################################################# ## ## LevelOfCongruenceSubgroup( ) ## ## The (arithmetic) level of a congruence subgroup G is the smallest positive ## number N such that G contains the principal congruence subgroup of level N ## DeclareAttribute( "LevelOfCongruenceSubgroup", IsCongruenceSubgroup ); ############################################################################# ## ## LevelOfCongruenceSubgroupGammaMN( ) ## ## For the congruence subgroup GammaMN we need to store additionally ## two integers determining the 1st and 2nd lines of the matrix ## DeclareAttribute( "LevelOfCongruenceSubgroupGammaMN", IsCongruenceSubgroup ); ############################################################################# ## ## IndexInSL2Z( ) ## ## The index of a congruence subgroup in SL_2(Z) will be stored as its ## attribute. This also will allow us to install a method for Index(G,H) when ## G is SL_2(Z) and H is a congruence subgroup. You should remember that we ## are working with the SL_2(Z), because it is available in GAP, and not with ## the PSL_2(Z) since the latter is not implemented in GAP. ## DeclareAttribute( "IndexInSL2Z", IsCongruenceSubgroup ); ############################################################################# ## ## IntersectionOfCongruenceSubgroups( ) ## ## We declare special type of congruence subgroups that are intersections of ## a finite number congruence subgroups of types CongruenceSubgroupGamma, ## CongruenceSubgroupGamma_0, CongruenceSubgroupGamma^0, CongruenceSubgroupGamma_1 ## and CongruenceSubgroupGamma^1. The list of subgroups defining this ## intersection will be stored in the attribute "DefiningCongruenceSubgroups". ## DeclareGlobalFunction("IntersectionOfCongruenceSubgroups"); DeclareAttribute( "DefiningCongruenceSubgroups", IsCongruenceSubgroup ); ############################################################################# # # CanEasilyCompareCongruenceSubgroups( G, H ) # DeclareOperation( "CanEasilyCompareCongruenceSubgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ] ); ############################################################################# # # CanReduceIntersectionOfCongruenceSubgroups( G, H ) # # This function mimics the structure of the method for Intersection for # congruence subgroups. It returns true, if their intersection can be reduced # to one of the canonical congruence subgroups, and false otherwise, i.e. the # intersection can be expressed only as IntersectionOfCongruenceSubgroups. # This is used in IntersectionOfCongruenceSubgroups to reduce the list of # canonical subgroups forming the intersection. # DeclareOperation( "CanReduceIntersectionOfCongruenceSubgroups", [ IsCongruenceSubgroup, IsCongruenceSubgroup ] ); ############################################################################# # # NumeratorOfGFSElement( gfs, i ) # # Returns the numerator of the i-th term of the generalised Farey sequence # gfs: for the 1st infinite entry returns -1, for the last one returns 1, # for all other entries returns usual numerator. # DeclareGlobalFunction( "NumeratorOfGFSElement" ); ############################################################################# # # DenominatorOfGFSElement( gfs, i ) # # Returns the denominator of the i-th term of the generalised Farey sequence # gfs: for both infinite entries returns 0, for the other ones returns usual # denominator. # DeclareGlobalFunction( "DenominatorOfGFSElement" ); ############################################################################# # # IsValidFareySymbol( fs ) # # This function is used in FareySymbolByData to validate its output # DeclareGlobalFunction( "IsValidFareySymbol" ); ############################################################################# # # MatrixByEvenInterval( gfs, i ) # DeclareGlobalFunction( "MatrixByEvenInterval" ); ############################################################################# # # MatrixByOddInterval( gfs, i ) # DeclareGlobalFunction( "MatrixByOddInterval" ); ############################################################################# # # MatrixByFreePairOfIntervals( gfs, k, kp ) # DeclareGlobalFunction( "MatrixByFreePairOfIntervals" ); ############################################################################# ## #E ## congruence-1.2.5/lib/farey.gi000644 000766 000024 00000026771 14376366031 016072 0ustar00obk1staff000000 000000 ############################################################################# ## #W farey.gi The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## ############################################################################# ############################################################################# ## ## IsFareySymbolDefaultRep ## DeclareRepresentation( "IsFareySymbolDefaultRep", IsPositionalObjectRep, [ 1, 2 ] ); ############################################################################# ## ## FareySymbolByData( , ) ## ## This constructor creates Farey symbol with the given generalized Farey ## sequence and list of labels. It also checks conditions from the definition ## of Farey symbol and returns an error if they are not satisfied ## InstallMethod( FareySymbolByData, "for two lists that are g.F.S. and labels for Farey symbol", [ IsList, IsList ], 0, function( gfs, labels) local fs; fs :=Objectify( NewType( NewFamily("FareySymbolsFamily", IsFareySymbol), IsFareySymbol), [ gfs, labels ] ); if IsValidFareySymbol(fs) then return fs; else Error(" is not a valid Farey symbol !!! \n"); fi; end); ############################################################################# ## ## GeneralizedFareySequence( ) ## LabelsOfFareySymbol( ) ## ## The data used to create the Farey symbol are stored as its attributes ## InstallMethod( GeneralizedFareySequence, "for Farey symbol in default representation", [ IsFareySymbol ], fs -> fs![1]); InstallMethod( LabelsOfFareySymbol, "for Farey symbol in default representation", [ IsFareySymbol ], fs -> fs![2] ); ############################################################################# ## ## ViewObj( fs ) ## PrintObj( fs ) ## InstallMethod( ViewObj, "for Farey symbol", [ IsFareySymbol ], 0, function(fs) Print( GeneralizedFareySequence(fs), "\n", LabelsOfFareySymbol(fs) ); end); InstallMethod( PrintObj, "for Farey symbol", [ IsFareySymbol ], 0, function(fs) Print( "FareySymbolByData( ", GeneralizedFareySequence(fs), ", ", LabelsOfFareySymbol(fs), " ] " ); end); ############################################################################# ## ## FareySymbol( ) ## ## For a subgroup of a finite index G, this attribute stores the ## corresponding Farey symbol. The algorithm for its computation must work ## with any matrix group for which the membership test is available ## InstallMethod( FareySymbol, "for a congruence subgroup", [ IsCongruenceSubgroup ], 0, function( G ) local gfs, # generalized Farey sequence (g.F.S.) labels, # labels of this g.F.S. fs, # resulting Farey symbol i, j, k, t, # counters stepnr, # number of the inductive ste newvertex, # new vertex to be inserted on the current inductive step unpairednr, # number of the 1st vertex of the unpaired side lastlabel, # last used label mat, # matrix by free pair of intervals unpairednumbers, # list of positions with assigned labels denominators, # denominators of current g.F.S. elements possibledenominators, # list of denominators arising from these positions minden, # minimum of possible denominators pos, # chosen position of minden in possibledenominators nrlabels, # number of labels assigned range1, # range for the search of odd and even labels range2, # range for the search of free (i.e.numerical) labels isfirstlabelssearch; # flag for determining of the range1 and range2 # # Initial data setup # if LevelOfCongruenceSubgroup(G)=1 then return FareySymbolByData( [ infinity, 0, infinity ], ["even","odd"]) ; fi; gfs := [ infinity, 0, infinity ]; labels:=[]; nrlabels:=0; stepnr:=0; lastlabel:=0; isfirstlabelssearch:=true; # # we perform the next loop until we will have fully labeled gfs # while nrlabels < Length( gfs ) - 1 do stepnr:=stepnr+1; Info( InfoCongruence, 2, "Step ", stepnr, " : g.F.S. of length ", Length(gfs), " with ", nrlabels, " labels"); Info( InfoCongruence, 3, " gfs = ", gfs ); Info( InfoCongruence, 3, "labels = ", labels ); # # 1. Choose any of the unpaired sides and insert new vertex # # 1.1. Find unpaired side that will give us a new vertex # with the minimal denominator (on the first step we # do some trick to get [infinity,0,1,infinity]) unpairednumbers := Filtered( [ 1 .. Length(gfs)-1 ], i -> not IsBound( labels[ i ] ) ); Info( InfoCongruence, 3, "Positions of unpaired labels : ", unpairednumbers ); # to avoid repeated calls of DenominatorOfGFSElement, we are caching # values of denominators from required positions denominators := []; for i in unpairednumbers do if not IsBound(denominators[i]) then denominators[i]:=DenominatorOfGFSElement(gfs,i); fi; denominators[i+1]:=DenominatorOfGFSElement(gfs,i+1); od; possibledenominators := List( unpairednumbers, i -> denominators[i] + denominators[i+1] ); Info( InfoCongruence, 3, "Possible denominators : ", possibledenominators ); minden := Minimum(possibledenominators); # we give priority to positive numbers in g.F.S. pos:=PositionProperty( [ 1 .. Length(unpairednumbers) ], i -> ( possibledenominators[i] = minden ) and ( NumeratorOfGFSElement( gfs, unpairednumbers[i] ) >=0 ) ); if pos=fail then pos:=PositionProperty( [ 1 .. Length(unpairednumbers) ], i -> possibledenominators[i] = minden ); fi; unpairednr := unpairednumbers[ pos ]; #i:=1; #repeat # pos := PositionNthOccurrence( possibledenominators, minden, i ); # i := i+1; # unpairednr := unpairednumbers[ pos ]; #until NumeratorOfGFSElement(gfs, unpairednr) >= 0; # # 1.2. Compute new vertex by the Farey sequence rule # newvertex := ( NumeratorOfGFSElement(gfs, unpairednr) + NumeratorOfGFSElement(gfs, unpairednr+1) ) / minden; # # 1.3. Insert this new vertex and an empty spot for the label # Info( InfoCongruence, 2, "Inserting ", newvertex, " at position ", unpairednr+1); Add( gfs, newvertex, unpairednr+1); Add( unpairednumbers, unpairednr, pos ); for i in [ pos+1 .. Length(unpairednumbers) ] do unpairednumbers[i] := unpairednumbers[i]+1; od; Add( labels, "hole" , unpairednr ); Unbind(labels[unpairednr]); # # 2. For each of new sides, we check if they are paired and # assign labels, if this is the case # if isfirstlabelssearch then range1 := [ 1 .. Length(gfs)-1 ]; range2 := [ 1 .. Length(gfs)-1 ]; else # if we already checked all cases for all possible labels, # on each new step it is enough to check only new intervals range1 := [ unpairednr, unpairednr+1 ]; # Slower but more obvious options for range2 could be: # range2 := [ 1 .. Length(gfs)-1 ]; # range2:= Filtered( [ 1 .. Length(gfs)-1 ], i -> not IsBound( labels[ i ] ) ); # but we use the fastest one range2 := unpairednumbers; fi; if not ( IsPrincipalCongruenceSubgroup(G) and LevelOfCongruenceSubgroup(G) > 2 ) then for i in range1 do # we do not check that labels[i] is not bound because this is # guaranteed by the algorithm mat := MatrixByOddInterval( gfs, i ); if mat in G or -mat in G then labels[i]:="odd"; nrlabels:=nrlabels+1; Info( InfoCongruence, 2, "Putting label ", lastlabel, " at position ", i ); else mat := MatrixByEvenInterval( gfs, i ); if mat in G or -mat in G then labels[i]:="even"; nrlabels:=nrlabels+1; Info( InfoCongruence, 2, "Putting label ", lastlabel, " at position ", i ); fi; fi; od; fi; for i in range1 do for j in range2 do # we eliminate the case i=j since we always check different intervals # now we check that both labels[i] and labels[j] are not bound for a case # if they were already assigned during the search for odd/even labels if i<>j and not IsBound( labels[i] ) and not IsBound( labels[j] ) then mat := MatrixByFreePairOfIntervals( gfs, i, j ); if mat in G or -mat in G then lastlabel := lastlabel+1; labels[i]:=lastlabel; labels[j]:=lastlabel; nrlabels:=nrlabels+2; Info( InfoCongruence, 2, "Putting label ", lastlabel, " at positions ", i, " and ", j ); # since i-th interval can be paired only with one j-th interval, # we quit from inner loop and go to the next i break; fi; fi; od; od; isfirstlabelssearch:=false; if stepnr mod 25000 = 0 then Error("You reached the checkpoint on the ", stepnr, "th iteration \n", "Currently you have g.F.S. of length ", Length(gfs), " with ", nrlabels, " labels assigned \n", "Use the index of the subgroup to get an idea about possible length of the g.F.S.:\n", "it will be equal to the index of in PSL_2Z minus the number of odd intervals in g.F.S.\n"); fi; od; fs := FareySymbolByData( gfs, labels) ; return fs; end); ############################################################################# # # GeneratorsByFareySymbol( fs ) # InstallGlobalFunction( GeneratorsByFareySymbol, function( fs ) local gfs, labels, usedlabels, gens, i, j, m; gfs := GeneralizedFareySequence(fs); labels := LabelsOfFareySymbol(fs); usedlabels:=[]; gens:=[]; for i in [ 1 .. Length(labels) ] do if labels[i]="even" then Info( InfoCongruence, 2, "labels[", i, "] = ", labels[i] ); m := MatrixByEvenInterval( gfs, i ); Add( gens, m ); if InfoLevel( InfoCongruence ) = 2 then Display(m); fi; elif labels[i]="odd" then Info( InfoCongruence, 2, "labels[", i, "] = ", labels[i] ); m := MatrixByOddInterval( gfs, i ); Add( gens, m ); if InfoLevel( InfoCongruence ) = 2 then Display(m); fi; elif not labels[i] in usedlabels then j := PositionNthOccurrence( labels, labels[i], 2 ); Info( InfoCongruence, 2, "labels[", i, "] = ", labels[i], " = labels[", j, "]" ); m := MatrixByFreePairOfIntervals( gfs, i, j ); Add( gens, m ); Add( usedlabels, labels[i] ); if InfoLevel( InfoCongruence ) = 2 then Display(m); fi; fi; od; return gens; end); ############################################################################# # # IndexInPSL2ZByFareySymbol( fs ) # # By the proposition 7.2 [Kulkarni], for the Farey symbol with underlying # generalized Farey sequence { infinity, x0, x1, ..., xn, infinity }, the # index in PSL_2(Z) is given by the formula d = 3*n + e3, where e3 is the # number of odd intervals. # InstallGlobalFunction( IndexInPSL2ZByFareySymbol, function( fs ) local n, e3, x, d; n := Length( GeneralizedFareySequence(fs) ) - 3; e3:= Number( LabelsOfFareySymbol(fs), x -> x = "odd" ); d := 3 * n + e3; return d; end); ############################################################################# ## #E ## congruence-1.2.5/lib/units.g000644 000766 000024 00000012626 14376366031 015747 0ustar00obk1staff000000 000000 ############################################################################# # # units.g The Congruence package Ann Dooms # Eric Jespers # Olexandr Konovalov # ############################################################################# ############################################################################# # # NormalSubgroupsForM2Q(G,H) # # Returns a list of normal subgroups N of G such that quotient G/N is H. # NormalSubgroupsForM2Q := function( G, H ) local ord,m, N; ord:= Size(G)/Size(H); # Can we speedup this computing only normal subgroups of given size? m:=Filtered( NormalSubgroups(G) , N -> Size(N)=ord); m:=Filtered( m, N -> IdGroup( G/N ) = IdGroup( H ) ); return m; end; ############################################################################# # # GeneratorsInM2Q(G,H) # # Returns a list of lists of generators of a subgroup of f.i. in M_2(Q), # one for each homomorphic image. # H has to be S3 or D8! # GeneratorsInM2Q:=function(G,H) local k,m; if IdGroup(H)=[6,1] then k:=3; # H = S_3 else k:=4; # H = D_8 fi; m:=NormalSubgroupsForM2Q(G,H); if Length(m) > 0 then return GeneratorsOfGroup( PrincipalCongruenceSubgroup(k*Size(G)/Size(H) ) ); else return [ ]; fi; end; ############################################################################# # # MatrixEntries( matrix, k ) # # Returns a list with integer entries. Will be applied with k=4n or 3n. # PROBLEM: some matrices gave non-integers! SOLUTION: multiplied with -I_2! # MatrixEntries := function( matrix, k ) local g11,g12,g21,g22; g11:=(matrix[1][1]-1)/k; if not IsInt(g11) then matrix:=-matrix; g11:=(matrix[1][1]-1)/k; fi; g12:=matrix[1][2]/k; g21:=matrix[2][1]/k; g22:=(matrix[2][2]-1)/k; return [ g11, g12, g21, g22 ]; end; ############################################################################# # # D8Alpha(matrix,n) # # Returns a list with integer entries. # Will be applied with n = order of the normal subgroup N determining M_2(Q). # D8Alpha := function(matrix,n) local m,a0,a1,a2,a3; m := MatrixEntries(matrix,4*n); a0 := m[1] + m[4]; a1 := m[1] - m[2] + 2*m[3] - m[4]; a2 := m[1] + 2*m[3] - m[4]; a3 :=-m[1] + m[2] + m[4]; return [ a0, a1, a2, a3 ]; end; ############################################################################# # # S3Alpha(matrix,n) # # Returns a list with integer entries. # Will be applied with n = order of the normal subgroup N determining M_2(Q). # S3Alpha:= function(matrix,n) local m,a0,a1,a2,a3; m := MatrixEntries(matrix,3*n); a0 := m[1] + m[4]; a1 := 2*m[1] + 3*m[2] - m[3] - m[4]; a2 := -2*m[1] - 3*m[2] + m[3] + 2*m[4]; a3 := -m[1] - 3*m[2] + m[4]; return [ a0, a1, a2, a3 ]; end; ############################################################################# # # Alphas( G, H ) # # Returns a list of lists with integer entries which will serve for the units in U(ZG). # Alphas := function( G, H ) local gen,f,alpha,i; gen := GeneratorsInM2Q( G, H ); if IdGroup(H)=[6,1] then f:=S3Alpha; else f:=D8Alpha; fi; alpha:=[]; if Length(gen) > 0 then for i in [1..Length(gen)] do alpha[i] := f( gen[i], Size(G)/Size(H) ); od; fi; return alpha; end; ############################################################################# # # LiftGenerator(G,N) # # Lifts a minimal list of generators form G/N to G. # LiftGenerator := function( G, N ) local l,q,s,hom,i; l:=[]; hom:=NaturalHomomorphismByNormalSubgroup(G,N); q := Image( hom ); s := MinimalGeneratingSet( q ); for i in [ 1 .. Length(s) ] do Add( l, PreImagesRepresentative( hom,s[i]) ); od; return l; end; ############################################################################# # # CreateUnits(G,H) # # Creates units of ZG. H must be D8 or S3. # CreateUnits:=function(G,H) local m,alpha,a,b,x,y,ZG,emb,hat,u,i,j; m:=NormalSubgroupsForM2Q(G,H); alpha:=Alphas(G,H); a:=[]; b:=[]; ZG:=GroupRing(Integers,G); emb := Embedding(G,ZG); hat:=[]; u:=[]; if Length(m)<>0 then for i in [1..Length(m)] do hat[i]:=Sum( List(m[i], x->x^emb)); u[i]:=[]; x := LiftGenerator(G,m[i])[1]; y := LiftGenerator(G,m[i])[2]; if x^2=Identity(G) then a[i]:=y^emb; b[i]:=x^emb; else a[i]:=x^emb; b[i]:=y^emb; fi; if IdGroup(H)=[6,1] then for j in [1..Length(alpha)] do u[i][j]:=Identity(ZG) + (alpha[j][1]*Identity(ZG) + alpha[j][2]*a[i] + alpha[j][3]*b[i] + alpha[j][4]*a[i]^2*b[i])*(Identity(ZG)-a[i])*hat[i]; od; else for j in [1..Length(alpha)] do u[i][j]:=Identity(ZG) + (alpha[j][1]*Identity(ZG) + alpha[j][2]*a[i] + alpha[j][3]*b[i] + alpha[j][4]*a[i]*b[i])*(Identity(ZG)-a[i]^2)*hat[i]; od; fi; od; else fi; return u; end; ############################################################################# # # UnitsOfZGOfFiniteIndexInM2Q(G) # UnitsOfZGOfFiniteIndexInM2Q:= function(G) local u,v; u:=[]; v:=[]; if IsNilpotent(G)=true then u:=CreateUnits(G,DihedralGroup(8)); else u:=CreateUnits(G,DihedralGroup(8)); v:=CreateUnits(G,DihedralGroup(6)); fi; return [u,v]; end;